Guido van Rossum | f70e43a | 1991-02-19 12:39:46 +0000 | [diff] [blame] | 1 | |
Fred Drake | 5eb6d4e | 2000-07-08 23:37:28 +0000 | [diff] [blame] | 2 | #ifndef Py_TRACEBACK_H |
| 3 | #define Py_TRACEBACK_H |
| 4 | #ifdef __cplusplus |
| 5 | extern "C" { |
| 6 | #endif |
| 7 | |
Victor Stinner | 024e37a | 2011-03-31 01:31:06 +0200 | [diff] [blame] | 8 | #include "pystate.h" |
| 9 | |
Nicholas Bastin | a7604bf | 2004-03-21 18:37:23 +0000 | [diff] [blame] | 10 | struct _frame; |
| 11 | |
Guido van Rossum | 3f5da24 | 1990-12-20 15:06:42 +0000 | [diff] [blame] | 12 | /* Traceback interface */ |
Martin v. Löwis | 4d0d471 | 2010-12-03 20:14:31 +0000 | [diff] [blame] | 13 | #ifndef Py_LIMITED_API |
Nicholas Bastin | a7604bf | 2004-03-21 18:37:23 +0000 | [diff] [blame] | 14 | typedef struct _traceback { |
Victor Stinner | 0fe25a4 | 2010-06-17 23:08:50 +0000 | [diff] [blame] | 15 | PyObject_HEAD |
| 16 | struct _traceback *tb_next; |
| 17 | struct _frame *tb_frame; |
| 18 | int tb_lasti; |
| 19 | int tb_lineno; |
Nicholas Bastin | a7604bf | 2004-03-21 18:37:23 +0000 | [diff] [blame] | 20 | } PyTracebackObject; |
Martin v. Löwis | 4d0d471 | 2010-12-03 20:14:31 +0000 | [diff] [blame] | 21 | #endif |
Guido van Rossum | 66cb311 | 1994-12-30 15:33:50 +0000 | [diff] [blame] | 22 | |
Mark Hammond | 91a681d | 2002-08-12 07:21:58 +0000 | [diff] [blame] | 23 | PyAPI_FUNC(int) PyTraceBack_Here(struct _frame *); |
| 24 | PyAPI_FUNC(int) PyTraceBack_Print(PyObject *, PyObject *); |
Martin v. Löwis | 4d0d471 | 2010-12-03 20:14:31 +0000 | [diff] [blame] | 25 | #ifndef Py_LIMITED_API |
Victor Stinner | 0fe25a4 | 2010-06-17 23:08:50 +0000 | [diff] [blame] | 26 | PyAPI_FUNC(int) _Py_DisplaySourceLine(PyObject *, PyObject *, int, int); |
Martin v. Löwis | 4d0d471 | 2010-12-03 20:14:31 +0000 | [diff] [blame] | 27 | #endif |
Guido van Rossum | a330996 | 1993-07-28 09:05:47 +0000 | [diff] [blame] | 28 | |
Andrew M. Kuchling | 913b907 | 2002-03-19 16:02:35 +0000 | [diff] [blame] | 29 | /* Reveal traceback type so we can typecheck traceback objects */ |
Mark Hammond | 91a681d | 2002-08-12 07:21:58 +0000 | [diff] [blame] | 30 | PyAPI_DATA(PyTypeObject) PyTraceBack_Type; |
Christian Heimes | 90aa764 | 2007-12-19 02:45:37 +0000 | [diff] [blame] | 31 | #define PyTraceBack_Check(v) (Py_TYPE(v) == &PyTraceBack_Type) |
Guido van Rossum | 884afd6 | 1995-07-18 14:21:06 +0000 | [diff] [blame] | 32 | |
Victor Stinner | 024e37a | 2011-03-31 01:31:06 +0200 | [diff] [blame] | 33 | /* Write the Python traceback into the file 'fd'. For example: |
| 34 | |
| 35 | Traceback (most recent call first): |
| 36 | File "xxx", line xxx in <xxx> |
| 37 | File "xxx", line xxx in <xxx> |
| 38 | ... |
| 39 | File "xxx", line xxx in <xxx> |
| 40 | |
Victor Stinner | 024e37a | 2011-03-31 01:31:06 +0200 | [diff] [blame] | 41 | This function is written for debug purpose only, to dump the traceback in |
| 42 | the worst case: after a segmentation fault, at fatal error, etc. That's why, |
| 43 | it is very limited. Strings are truncated to 100 characters and encoded to |
| 44 | ASCII with backslashreplace. It doesn't write the source code, only the |
| 45 | function name, filename and line number of each frame. Write only the first |
| 46 | 100 frames: if the traceback is truncated, write the line " ...". |
| 47 | |
| 48 | This function is signal safe. */ |
| 49 | |
Victor Stinner | fcb88c4 | 2011-04-01 15:34:01 +0200 | [diff] [blame] | 50 | PyAPI_DATA(void) _Py_DumpTraceback( |
Victor Stinner | 024e37a | 2011-03-31 01:31:06 +0200 | [diff] [blame] | 51 | int fd, |
| 52 | PyThreadState *tstate); |
| 53 | |
| 54 | /* Write the traceback of all threads into the file 'fd'. current_thread can be |
| 55 | NULL. Return NULL on success, or an error message on error. |
| 56 | |
| 57 | This function is written for debug purpose only. It calls |
| 58 | _Py_DumpTraceback() for each thread, and so has the same limitations. It |
| 59 | only write the traceback of the first 100 threads: write "..." if there are |
| 60 | more threads. |
| 61 | |
| 62 | This function is signal safe. */ |
| 63 | |
| 64 | PyAPI_DATA(const char*) _Py_DumpTracebackThreads( |
| 65 | int fd, PyInterpreterState *interp, |
| 66 | PyThreadState *current_thread); |
| 67 | |
| 68 | |
Guido van Rossum | a330996 | 1993-07-28 09:05:47 +0000 | [diff] [blame] | 69 | #ifdef __cplusplus |
| 70 | } |
| 71 | #endif |
| 72 | #endif /* !Py_TRACEBACK_H */ |