]> granicus.if.org Git - python/commitdiff
split functionality into pystack and pystackv commands. The former will
authorSkip Montanaro <skip@pobox.com>
Wed, 17 Nov 2004 16:04:15 +0000 (16:04 +0000)
committerSkip Montanaro <skip@pobox.com>
Wed, 17 Nov 2004 16:04:15 +0000 (16:04 +0000)
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

index 145cc3a31219c7ecdc2e3b87299f2d09d84c8c62..51370e22dbcd49b2ab76e0ce783304a44062090b 100644 (file)
@@ -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