Issue #11393: _Py_DumpTraceback() writes the header even if there is no frame
This commit is contained in:
parent
a01ca12a52
commit
fcb88c4503
|
@ -38,8 +38,6 @@ PyAPI_DATA(PyTypeObject) PyTraceBack_Type;
|
||||||
...
|
...
|
||||||
File "xxx", line xxx in <xxx>
|
File "xxx", line xxx in <xxx>
|
||||||
|
|
||||||
Return 0 on success, -1 on error.
|
|
||||||
|
|
||||||
This function is written for debug purpose only, to dump the traceback in
|
This function is written for debug purpose only, to dump the traceback in
|
||||||
the worst case: after a segmentation fault, at fatal error, etc. That's why,
|
the worst case: after a segmentation fault, at fatal error, etc. That's why,
|
||||||
it is very limited. Strings are truncated to 100 characters and encoded to
|
it is very limited. Strings are truncated to 100 characters and encoded to
|
||||||
|
@ -49,7 +47,7 @@ PyAPI_DATA(PyTypeObject) PyTraceBack_Type;
|
||||||
|
|
||||||
This function is signal safe. */
|
This function is signal safe. */
|
||||||
|
|
||||||
PyAPI_DATA(int) _Py_DumpTraceback(
|
PyAPI_DATA(void) _Py_DumpTraceback(
|
||||||
int fd,
|
int fd,
|
||||||
PyThreadState *tstate);
|
PyThreadState *tstate);
|
||||||
|
|
||||||
|
|
|
@ -556,18 +556,19 @@ dump_frame(int fd, PyFrameObject *frame)
|
||||||
write(fd, "\n", 1);
|
write(fd, "\n", 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static void
|
||||||
dump_traceback(int fd, PyThreadState *tstate, int write_header)
|
dump_traceback(int fd, PyThreadState *tstate, int write_header)
|
||||||
{
|
{
|
||||||
PyFrameObject *frame;
|
PyFrameObject *frame;
|
||||||
unsigned int depth;
|
unsigned int depth;
|
||||||
|
|
||||||
frame = _PyThreadState_GetFrame(tstate);
|
|
||||||
if (frame == NULL)
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
if (write_header)
|
if (write_header)
|
||||||
PUTS(fd, "Traceback (most recent call first):\n");
|
PUTS(fd, "Traceback (most recent call first):\n");
|
||||||
|
|
||||||
|
frame = _PyThreadState_GetFrame(tstate);
|
||||||
|
if (frame == NULL)
|
||||||
|
return;
|
||||||
|
|
||||||
depth = 0;
|
depth = 0;
|
||||||
while (frame != NULL) {
|
while (frame != NULL) {
|
||||||
if (MAX_FRAME_DEPTH <= depth) {
|
if (MAX_FRAME_DEPTH <= depth) {
|
||||||
|
@ -580,13 +581,12 @@ dump_traceback(int fd, PyThreadState *tstate, int write_header)
|
||||||
frame = frame->f_back;
|
frame = frame->f_back;
|
||||||
depth++;
|
depth++;
|
||||||
}
|
}
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
void
|
||||||
_Py_DumpTraceback(int fd, PyThreadState *tstate)
|
_Py_DumpTraceback(int fd, PyThreadState *tstate)
|
||||||
{
|
{
|
||||||
return dump_traceback(fd, tstate, 1);
|
dump_traceback(fd, tstate, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Write the thread identifier into the file 'fd': "Current thread 0xHHHH:\" if
|
/* Write the thread identifier into the file 'fd': "Current thread 0xHHHH:\" if
|
||||||
|
|
Loading…
Reference in New Issue