bpo-35134: Split traceback.h header (GH-13430) · python/cpython@ed48866 (original) (raw)

1

``

-

2

1

`#ifndef Py_TRACEBACK_H

`

3

2

`#define Py_TRACEBACK_H

`

4

3

`#ifdef __cplusplus

`

5

4

`extern "C" {

`

6

5

`#endif

`

7

6

``

8

``

`-

#include "pystate.h"

`

9

``

-

10

7

`struct _frame;

`

11

8

``

12

9

`/* Traceback interface */

`

13

``

`-

#ifndef Py_LIMITED_API

`

14

``

`-

typedef struct _traceback {

`

15

``

`-

PyObject_HEAD

`

16

``

`-

struct _traceback *tb_next;

`

17

``

`-

struct _frame *tb_frame;

`

18

``

`-

int tb_lasti;

`

19

``

`-

int tb_lineno;

`

20

``

`-

} PyTracebackObject;

`

21

``

`-

#endif

`

22

10

``

23

11

`PyAPI_FUNC(int) PyTraceBack_Here(struct _frame *);

`

24

12

`PyAPI_FUNC(int) PyTraceBack_Print(PyObject *, PyObject *);

`

25

``

`-

#ifndef Py_LIMITED_API

`

26

``

`-

PyAPI_FUNC(int) _Py_DisplaySourceLine(PyObject *, PyObject *, int, int);

`

27

``

`-

PyAPI_FUNC(void) _PyTraceback_Add(const char *, const char *, int);

`

28

``

`-

#endif

`

29

13

``

30

14

`/* Reveal traceback type so we can typecheck traceback objects */

`

31

15

`PyAPI_DATA(PyTypeObject) PyTraceBack_Type;

`

32

16

`#define PyTraceBack_Check(v) (Py_TYPE(v) == &PyTraceBack_Type)

`

33

17

``

34

``

`-

#ifndef Py_LIMITED_API

`

35

``

`-

/* Write the Python traceback into the file 'fd'. For example:

`

36

``

-

37

``

`-

Traceback (most recent call first):

`

38

``

`-

File "xxx", line xxx in

`

39

``

`-

File "xxx", line xxx in

`

40

``

`-

...

`

41

``

`-

File "xxx", line xxx in

`

42

``

-

43

``

`-

This function is written for debug purpose only, to dump the traceback in

`

44

``

`-

the worst case: after a segmentation fault, at fatal error, etc. That's why,

`

45

``

`-

it is very limited. Strings are truncated to 100 characters and encoded to

`

46

``

`-

ASCII with backslashreplace. It doesn't write the source code, only the

`

47

``

`-

function name, filename and line number of each frame. Write only the first

`

48

``

`-

100 frames: if the traceback is truncated, write the line " ...".

`

49

``

-

50

``

`-

This function is signal safe. */

`

51

``

-

52

``

`-

PyAPI_FUNC(void) _Py_DumpTraceback(

`

53

``

`-

int fd,

`

54

``

`-

PyThreadState *tstate);

`

55

``

-

56

``

`-

/* Write the traceback of all threads into the file 'fd'. current_thread can be

`

57

``

`-

NULL.

`

58

``

-

59

``

`-

Return NULL on success, or an error message on error.

`

60

``

-

61

``

`-

This function is written for debug purpose only. It calls

`

62

``

`-

_Py_DumpTraceback() for each thread, and so has the same limitations. It

`

63

``

`-

only write the traceback of the first 100 threads: write "..." if there are

`

64

``

`-

more threads.

`

65

``

-

66

``

`-

If current_tstate is NULL, the function tries to get the Python thread state

`

67

``

`-

of the current thread. It is not an error if the function is unable to get

`

68

``

`-

the current Python thread state.

`

69

``

-

70

``

`-

If interp is NULL, the function tries to get the interpreter state from

`

71

``

`-

the current Python thread state, or from

`

72

``

`-

_PyGILState_GetInterpreterStateUnsafe() in last resort.

`

73

``

-

74

``

`-

It is better to pass NULL to interp and current_tstate, the function tries

`

75

``

`-

different options to retrieve these informations.

`

76

``

-

77

``

`-

This function is signal safe. */

`

78

``

-

79

``

`-

PyAPI_FUNC(const char*) _Py_DumpTracebackThreads(

`

80

``

`-

int fd,

`

81

``

`-

PyInterpreterState *interp,

`

82

``

`-

PyThreadState *current_tstate);

`

83

``

`-

#endif /* !Py_LIMITED_API */

`

84

18

``

85

19

`#ifndef Py_LIMITED_API

`

86

``

-

87

``

`-

/* Write a Unicode object into the file descriptor fd. Encode the string to

`

88

``

`-

ASCII using the backslashreplace error handler.

`

89

``

-

90

``

`-

Do nothing if text is not a Unicode object. The function accepts Unicode

`

91

``

`-

string which is not ready (PyUnicode_WCHAR_KIND).

`

92

``

-

93

``

`-

This function is signal safe. */

`

94

``

`-

PyAPI_FUNC(void) _Py_DumpASCII(int fd, PyObject *text);

`

95

``

-

96

``

`-

/* Format an integer as decimal into the file descriptor fd.

`

97

``

-

98

``

`-

This function is signal safe. */

`

99

``

`-

PyAPI_FUNC(void) _Py_DumpDecimal(

`

100

``

`-

int fd,

`

101

``

`-

unsigned long value);

`

102

``

-

103

``

`-

/* Format an integer as hexadecimal into the file descriptor fd with at least

`

104

``

`-

width digits.

`

105

``

-

106

``

`-

The maximum width is sizeof(unsigned long)*2 digits.

`

107

``

-

108

``

`-

This function is signal safe. */

`

109

``

`-

PyAPI_FUNC(void) _Py_DumpHexadecimal(

`

110

``

`-

int fd,

`

111

``

`-

unsigned long value,

`

112

``

`-

Py_ssize_t width);

`

113

``

-

114

``

`-

#endif /* !Py_LIMITED_API */

`

``

20

`+

define Py_CPYTHON_TRACEBACK_H

`

``

21

`+

include "cpython/traceback.h"

`

``

22

`+

undef Py_CPYTHON_TRACEBACK_H

`

``

23

`+

#endif

`

115

24

``

116

25

`#ifdef __cplusplus

`

117

26

`}

`