Skip to content

Commit

Permalink
include local variables when dumping Python stack trace
Browse files Browse the repository at this point in the history
  • Loading branch information
Skip Montanaro committed Apr 2, 2004
1 parent 456d325 commit 74d07f2
Showing 1 changed file with 36 additions and 9 deletions.
45 changes: 36 additions & 9 deletions Misc/gdbinit
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand All @@ -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
Expand Down

0 comments on commit 74d07f2

Please sign in to comment.