mirror of
https://github.com/python/cpython.git
synced 2025-08-03 08:34:29 +00:00
include local variables when dumping Python stack trace
This commit is contained in:
parent
456d3258d6
commit
74d07f2bfa
1 changed files with 36 additions and 9 deletions
45
Misc/gdbinit
45
Misc/gdbinit
|
@ -26,15 +26,6 @@ define pyg
|
|||
print _PyGC_Dump($arg0)
|
||||
end
|
||||
|
||||
# If you are in an eval_frame() function, calling pyframe with no
|
||||
# arguments will print the filename, function name, and line number.
|
||||
# It assumes that f is the name of the current frame.
|
||||
define pyframe
|
||||
x/s ((PyStringObject*)f->f_code->co_filename)->ob_sval
|
||||
x/s ((PyStringObject*)f->f_code->co_name)->ob_sval
|
||||
p f->f_lineno
|
||||
end
|
||||
|
||||
# Here's a somewhat fragile way to print the entire Python stack from gdb.
|
||||
# It's fragile because the tests for the value of $pc depend on the layout
|
||||
# of specific functions in the C source code.
|
||||
|
@ -46,6 +37,42 @@ end
|
|||
# tests succeeds as long as it's not true. In a similar fashion the if
|
||||
# statement tests to see if we are in eval_frame().
|
||||
|
||||
# print the local variables of the current frame
|
||||
define pylocals
|
||||
set $_i = 0
|
||||
while $_i < f->f_nlocals
|
||||
if f->f_localsplus + $_i != 0
|
||||
set $_names = co->co_varnames
|
||||
set $_name = PyString_AsString(PyTuple_GetItem($_names, $_i))
|
||||
printf "%s:\n", $_name
|
||||
# side effect of calling _PyObject_Dump is to dump the object's
|
||||
# info - assigning just prevents gdb from printing the
|
||||
# NULL return value
|
||||
set $_val = _PyObject_Dump(f->f_localsplus[$_i])
|
||||
end
|
||||
set $_i = $_i + 1
|
||||
end
|
||||
end
|
||||
|
||||
# print the current frame
|
||||
define pyframe
|
||||
set $__fn = PyString_AsString(co->co_filename)
|
||||
set $__n = PyString_AsString(co->co_name)
|
||||
printf "%s (%d): %s\n", $__fn, f->f_lineno, $__n
|
||||
pylocals
|
||||
end
|
||||
|
||||
# print the entire Python call stack
|
||||
define pystack
|
||||
while $pc < Py_Main || $pc > Py_GetArgcArgv
|
||||
if $pc > eval_frame && $pc < PyEval_EvalCodeEx
|
||||
pyframe
|
||||
end
|
||||
up-silently 1
|
||||
end
|
||||
select-frame 0
|
||||
end
|
||||
|
||||
define pystack
|
||||
while $pc < Py_Main || $pc > Py_GetArgcArgv
|
||||
if $pc > eval_frame && $pc < PyEval_EvalCodeEx
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue