From: Skip Montanaro Date: Wed, 17 Nov 2004 16:04:15 +0000 (+0000) Subject: split functionality into pystack and pystackv commands. The former will X-Git-Tag: v2.4c1~10 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=0bb2a65dbdbad6731dfc6a942220e4438e393b85;p=thirdparty%2FPython%2Fcpython.git 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. --- diff --git a/Misc/gdbinit b/Misc/gdbinit index 145cc3a31219..51370e22dbcd 100644 --- a/Misc/gdbinit +++ b/Misc/gdbinit @@ -43,12 +43,16 @@ define pylocals end end -# print the current frame +# print the current frame - verbose +define pyframev + pyframe + pylocals +end + define pyframe - set $__fn = PyString_AsString(co->co_filename) - set $__n = PyString_AsString(co->co_name) + 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 - pylocals end # Here's a somewhat fragile way to print the entire Python stack from gdb. @@ -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