From 0bb2a65dbdbad6731dfc6a942220e4438e393b85 Mon Sep 17 00:00:00 2001 From: Skip Montanaro Date: Wed, 17 Nov 2004 16:04:15 +0000 Subject: [PATCH] split functionality into pystack and pystackv commands. The former will work with core dumps because it avoids calling any Python API routines. The latter prints all the local variable values as well as the stack frames but won't work with core dumps because it relies on _PyObject_Dump to print variables. --- Misc/gdbinit | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/Misc/gdbinit b/Misc/gdbinit index 145cc3a3121..51370e22dbc 100644 --- a/Misc/gdbinit +++ b/Misc/gdbinit @@ -43,14 +43,18 @@ define pylocals 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 +# print the current frame - verbose +define pyframev + pyframe pylocals end +define pyframe + set $__fn = (char *)((PyStringObject *)co->co_filename)->ob_sval + set $__n = (char *)((PyStringObject *)co->co_name)->ob_sval + printf "%s (%d): %s\n", $__fn, f->f_lineno, $__n +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. @@ -72,3 +76,14 @@ define pystack end select-frame 0 end + +# print the entire Python call stack - verbose mode +define pystackv + while $pc < Py_Main || $pc > Py_GetArgcArgv + if $pc > PyEval_EvalFrame && $pc < PyEval_EvalCodeEx + pyframev + end + up-silently 1 + end + select-frame 0 +end