blob: 891000c8fe27eca88e55d4e92a40d6a303013c7a [file] [log] [blame]
Guido van Rossumf70e43a1991-02-19 12:39:46 +00001
Fred Drake5eb6d4e2000-07-08 23:37:28 +00002#ifndef Py_TRACEBACK_H
3#define Py_TRACEBACK_H
4#ifdef __cplusplus
5extern "C" {
6#endif
7
Victor Stinner024e37a2011-03-31 01:31:06 +02008#include "pystate.h"
9
Nicholas Bastina7604bf2004-03-21 18:37:23 +000010struct _frame;
11
Guido van Rossum3f5da241990-12-20 15:06:42 +000012/* Traceback interface */
Martin v. Löwis4d0d4712010-12-03 20:14:31 +000013#ifndef Py_LIMITED_API
Nicholas Bastina7604bf2004-03-21 18:37:23 +000014typedef struct _traceback {
Victor Stinner0fe25a42010-06-17 23:08:50 +000015 PyObject_HEAD
16 struct _traceback *tb_next;
17 struct _frame *tb_frame;
18 int tb_lasti;
19 int tb_lineno;
Nicholas Bastina7604bf2004-03-21 18:37:23 +000020} PyTracebackObject;
Martin v. Löwis4d0d4712010-12-03 20:14:31 +000021#endif
Guido van Rossum66cb3111994-12-30 15:33:50 +000022
Mark Hammond91a681d2002-08-12 07:21:58 +000023PyAPI_FUNC(int) PyTraceBack_Here(struct _frame *);
24PyAPI_FUNC(int) PyTraceBack_Print(PyObject *, PyObject *);
Martin v. Löwis4d0d4712010-12-03 20:14:31 +000025#ifndef Py_LIMITED_API
Victor Stinner0fe25a42010-06-17 23:08:50 +000026PyAPI_FUNC(int) _Py_DisplaySourceLine(PyObject *, PyObject *, int, int);
Serhiy Storchaka73c95f12015-06-21 15:59:46 +030027PyAPI_FUNC(void) _PyTraceback_Add(const char *, const char *, int);
Martin v. Löwis4d0d4712010-12-03 20:14:31 +000028#endif
Guido van Rossuma3309961993-07-28 09:05:47 +000029
Andrew M. Kuchling913b9072002-03-19 16:02:35 +000030/* Reveal traceback type so we can typecheck traceback objects */
Mark Hammond91a681d2002-08-12 07:21:58 +000031PyAPI_DATA(PyTypeObject) PyTraceBack_Type;
Christian Heimes90aa7642007-12-19 02:45:37 +000032#define PyTraceBack_Check(v) (Py_TYPE(v) == &PyTraceBack_Type)
Guido van Rossum884afd61995-07-18 14:21:06 +000033
Victor Stinner024e37a2011-03-31 01:31:06 +020034/* Write the Python traceback into the file 'fd'. For example:
35
36 Traceback (most recent call first):
37 File "xxx", line xxx in <xxx>
38 File "xxx", line xxx in <xxx>
39 ...
40 File "xxx", line xxx in <xxx>
41
Victor Stinner024e37a2011-03-31 01:31:06 +020042 This function is written for debug purpose only, to dump the traceback in
43 the worst case: after a segmentation fault, at fatal error, etc. That's why,
44 it is very limited. Strings are truncated to 100 characters and encoded to
45 ASCII with backslashreplace. It doesn't write the source code, only the
46 function name, filename and line number of each frame. Write only the first
47 100 frames: if the traceback is truncated, write the line " ...".
48
49 This function is signal safe. */
50
Victor Stinnerfcb88c42011-04-01 15:34:01 +020051PyAPI_DATA(void) _Py_DumpTraceback(
Victor Stinner024e37a2011-03-31 01:31:06 +020052 int fd,
53 PyThreadState *tstate);
54
55/* Write the traceback of all threads into the file 'fd'. current_thread can be
56 NULL. Return NULL on success, or an error message on error.
57
58 This function is written for debug purpose only. It calls
59 _Py_DumpTraceback() for each thread, and so has the same limitations. It
60 only write the traceback of the first 100 threads: write "..." if there are
61 more threads.
62
63 This function is signal safe. */
64
65PyAPI_DATA(const char*) _Py_DumpTracebackThreads(
66 int fd, PyInterpreterState *interp,
67 PyThreadState *current_thread);
68
69
Guido van Rossuma3309961993-07-28 09:05:47 +000070#ifdef __cplusplus
71}
72#endif
73#endif /* !Py_TRACEBACK_H */