]> granicus.if.org Git - python/commitdiff
Merged revisions 85646 via svnmerge from
authorGregory P. Smith <greg@mad-scientist.com>
Sun, 17 Oct 2010 18:47:43 +0000 (18:47 +0000)
committerGregory P. Smith <greg@mad-scientist.com>
Sun, 17 Oct 2010 18:47:43 +0000 (18:47 +0000)
svn+ssh://pythondev@svn.python.org/python/branches/py3k

........
  r85646 | gregory.p.smith | 2010-10-17 11:38:04 -0700 (Sun, 17 Oct 2010) | 6 lines

  * Applys part of the patch from http://bugs.python.org/issue3631 to add
    a py_decref macro, fixup the pyo macro and reuse it and avoid a memory
    leak introduced by the pylocals macro.
  * Adds a note about gdb 7 python debugging support with links for
    more info on that.
........

Misc/gdbinit

index 4400ba4bdf8a7455448dfb70ce24cf82f2a10aac..a5be5df978702425d9308ab67c27430cf2bf7964 100644 (file)
@@ -1,5 +1,3 @@
-# -*- ksh -*-
-#
 # If you use the GNU debugger gdb to debug the Python C runtime, you
 # might find some of the following commands useful.  Copy this to your
 # ~/.gdbinit file and it'll get loaded into gdb automatically when you
 #    address    : 84a7a2c
 #    $1 = void
 #    (gdb)
+#
+# NOTE: If you have gdb 7 or later, it supports debugging of Python directly
+# with embedded macros that you may find superior to what is in here.
+# See https://fedoraproject.org/wiki/Features/EasierPythonDebugging
+# and http://bugs.python.org/issue8032 for more gdb 7 python information.
+
+# gdb version of Py_DECREF(obj) macro
+define py_decref
+    set $__obj = $arg0
+    set $__obj->ob_refcnt -= 1
+    if ($__obj->ob_refcnt == 0)
+        set $__obj = _Py_Dealloc($__obj)
+    end
+end
 
 # Prints a representation of the object to stderr, along with the
 # number of reference counts it current has and the hex address the
 # object is allocated at.  The argument must be a PyObject*
 define pyo
-print _PyObject_Dump($arg0)
+    # side effect of calling _PyObject_Dump is to dump the object's
+    # info - assigning just prevents gdb from printing the
+    # NULL return value
+    set $_unused_void = _PyObject_Dump($arg0)
 end
 
 # Prints a representation of the object to stderr, along with the
 # number of reference counts it current has and the hex address the
 # object is allocated at.  The argument must be a PyGC_Head*
 define pyg
-print _PyGC_Dump($arg0)
+    print _PyGC_Dump($arg0)
 end
 
 # print the local variables of the current frame
@@ -34,10 +49,8 @@ define pylocals
            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])
+            py_decref $_name
+            pyo f->f_localsplus[$_i]
        end
         set $_i = $_i + 1
     end