[Python-checkins] python/dist/src/Misc gdbinit,1.4,1.5

montanaro at users.sourceforge.net montanaro at users.sourceforge.net
Fri Apr 2 09:51:16 EST 2004


Update of /cvsroot/python/python/dist/src/Misc
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv3355

Modified Files:
	gdbinit 
Log Message:
include local variables when dumping Python stack trace


Index: gdbinit
===================================================================
RCS file: /cvsroot/python/python/dist/src/Misc/gdbinit,v
retrieving revision 1.4
retrieving revision 1.5
diff -C2 -d -r1.4 -r1.5
*** gdbinit	1 Mar 2004 15:44:05 -0000	1.4
--- gdbinit	2 Apr 2004 14:51:13 -0000	1.5
***************
*** 27,39 ****
  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
--- 27,30 ----
***************
*** 47,50 ****
--- 38,77 ----
  # 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




More information about the Python-checkins mailing list