@@ -2117,6 +2117,51 @@ parse_frame_object(
2117
2117
}
2118
2118
#endif
2119
2119
2120
+ // struct _PyInterpreterFrame {
2121
+ // _PyStackRef f_executable; /* Deferred or strong reference (code object or None) */
2122
+ // struct _PyInterpreterFrame *previous;
2123
+ // _PyStackRef f_funcobj; /* Deferred or strong reference. Only valid if not on C stack */
2124
+ // PyObject *f_globals; /* Borrowed reference. Only valid if not on C stack */
2125
+ // PyObject *f_builtins; /* Borrowed reference. Only valid if not on C stack */
2126
+ // PyObject *f_locals; /* Strong reference, may be NULL. Only valid if not on C stack */
2127
+ // PyFrameObject *frame_obj; /* Strong reference, may be NULL. Only valid if not on C stack */
2128
+ // _Py_CODEUNIT *instr_ptr; /* Instruction currently executing (or about to begin) */
2129
+ // _PyStackRef *stackpointer;
2130
+ // #ifdef Py_GIL_DISABLED
2131
+ // /* Index of thread-local bytecode containing instr_ptr. */
2132
+ // int32_t tlbc_index;
2133
+ // #endif
2134
+ // uint16_t return_offset; /* Only relevant during a function call */
2135
+ // char owner;
2136
+ // #ifdef Py_DEBUG
2137
+ // uint8_t visited:1;
2138
+ // uint8_t lltrace:7;
2139
+ // #else
2140
+ // uint8_t visited;
2141
+ // #endif
2142
+ // /* Locals and stack */
2143
+ // _PyStackRef localsplus[1];
2144
+ // };
2145
+ _PyInterpreterFrame * frame_ptr = (_PyInterpreterFrame * )frame ;
2146
+ // Print all fields for debugging purposes
2147
+ printf ("Frame at %p:\n" , (void * )address );
2148
+ printf (" f_executable: %p\n" , (void * )frame_ptr -> f_executable .bits );
2149
+ printf (" previous: %p\n" , (void * )frame_ptr -> previous );
2150
+ printf (" f_funcobj: %p\n" , (void * )frame_ptr -> f_funcobj .bits );
2151
+ printf (" f_globals: %p\n" , (void * )frame_ptr -> f_globals );
2152
+ printf (" f_builtins: %p\n" , (void * )frame_ptr -> f_builtins );
2153
+ printf (" f_locals: %p\n" , (void * )frame_ptr -> f_locals );
2154
+ printf (" frame_obj: %p\n" , (void * )frame_ptr -> frame_obj );
2155
+ printf (" instr_ptr: %p\n" , (void * )frame_ptr -> instr_ptr );
2156
+ printf (" stackpointer: %p\n" , (void * )frame_ptr -> stackpointer );
2157
+ #ifdef Py_GIL_DISABLED
2158
+ printf (" tlbc_index: %d\n" , frame_ptr -> tlbc_index );
2159
+ #endif
2160
+ printf (" return_offset: %d\n" , frame_ptr -> return_offset );
2161
+ printf (" owner: %d\n" , frame_ptr -> owner );
2162
+ printf (" visited: %d\n" , frame_ptr -> visited );
2163
+ printf (" localsplus: %p\n" , (void * )frame_ptr -> localsplus );
2164
+
2120
2165
return parse_code_object (
2121
2166
unwinder , result , GET_MEMBER (uintptr_t , frame , unwinder -> debug_offsets .interpreter_frame .executable ),
2122
2167
instruction_pointer , previous_frame , tlbc_index );
0 commit comments