mirror of
https://github.com/python/cpython.git
synced 2025-12-04 00:30:19 +00:00
gh-106597: Add debugging struct with offsets for out-of-process tools (#106598)
This commit is contained in:
parent
579aa89e68
commit
b444bfb0a3
3 changed files with 151 additions and 1 deletions
|
|
@ -53,12 +53,101 @@ typedef struct _Py_AuditHookEntry {
|
|||
void *userData;
|
||||
} _Py_AuditHookEntry;
|
||||
|
||||
typedef struct _Py_DebugOffsets {
|
||||
char cookie[8];
|
||||
uint64_t version;
|
||||
// Runtime state offset;
|
||||
struct _runtime_state {
|
||||
off_t finalizing;
|
||||
off_t interpreters_head;
|
||||
} runtime_state;
|
||||
|
||||
// Interpreter state offset;
|
||||
struct _interpreter_state {
|
||||
off_t next;
|
||||
off_t threads_head;
|
||||
off_t gc;
|
||||
off_t imports_modules;
|
||||
off_t sysdict;
|
||||
off_t builtins;
|
||||
off_t ceval_gil;
|
||||
off_t gil_runtime_state_locked;
|
||||
off_t gil_runtime_state_holder;
|
||||
} interpreter_state;
|
||||
|
||||
// Thread state offset;
|
||||
struct _thread_state{
|
||||
off_t prev;
|
||||
off_t next;
|
||||
off_t interp;
|
||||
off_t cframe;
|
||||
off_t thread_id;
|
||||
off_t native_thread_id;
|
||||
} thread_state;
|
||||
|
||||
// InterpreterFrame offset;
|
||||
struct _interpreter_frame {
|
||||
off_t previous;
|
||||
off_t executable;
|
||||
off_t prev_instr;
|
||||
off_t localsplus;
|
||||
off_t owner;
|
||||
} interpreter_frame;
|
||||
|
||||
// CFrame offset;
|
||||
struct _cframe {
|
||||
off_t current_frame;
|
||||
off_t previous;
|
||||
} cframe;
|
||||
|
||||
// Code object offset;
|
||||
struct _code_object {
|
||||
off_t filename;
|
||||
off_t name;
|
||||
off_t linetable;
|
||||
off_t firstlineno;
|
||||
off_t argcount;
|
||||
off_t localsplusnames;
|
||||
off_t localspluskinds;
|
||||
off_t co_code_adaptive;
|
||||
} code_object;
|
||||
|
||||
// PyObject offset;
|
||||
struct _pyobject {
|
||||
off_t ob_type;
|
||||
} pyobject;
|
||||
|
||||
// PyTypeObject object offset;
|
||||
struct _type_object {
|
||||
off_t tp_name;
|
||||
} type_object;
|
||||
|
||||
// PyTuple object offset;
|
||||
struct _tuple_object {
|
||||
off_t ob_item;
|
||||
} tuple_object;
|
||||
} _Py_DebugOffsets;
|
||||
|
||||
/* Full Python runtime state */
|
||||
|
||||
/* _PyRuntimeState holds the global state for the CPython runtime.
|
||||
That data is exposed in the internal API as a static variable (_PyRuntime).
|
||||
*/
|
||||
typedef struct pyruntimestate {
|
||||
/* This field must be first to facilitate locating it by out of process
|
||||
* debuggers. Out of process debuggers will use the offsets contained in this
|
||||
* field to be able to locate other fields in several interpreter structures
|
||||
* in a way that doesn't require them to know the exact layout of those
|
||||
* structures.
|
||||
*
|
||||
* IMPORTANT:
|
||||
* This struct is **NOT** backwards compatible between minor version of the
|
||||
* interpreter and the members, order of members and size can change between
|
||||
* minor versions. This struct is only guaranteed to be stable between patch
|
||||
* versions for a given minor version of the interpreter.
|
||||
*/
|
||||
_Py_DebugOffsets debug_offsets;
|
||||
|
||||
/* Has been initialized to a safe state.
|
||||
|
||||
In order to be effective, this must be set to 0 during or right
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue