[Python-checkins] r80289 - in python/branches/py3k: Lib/test/test_gdb.py Misc/NEWS Tools/gdb/libpython.py

victor.stinner python-checkins at python.org
Wed Apr 21 00:32:07 CEST 2010


Author: victor.stinner
Date: Wed Apr 21 00:32:07 2010
New Revision: 80289

Log:
Merged revisions 80288 via svnmerge from 
svn+ssh://pythondev@svn.python.org/python/trunk

........
  r80288 | victor.stinner | 2010-04-21 00:28:31 +0200 (mer., 21 avril 2010) | 2 lines
  
  Issue #8437: Fix test_gdb failures, patch written by Dave Malcolm
........


Modified:
   python/branches/py3k/   (props changed)
   python/branches/py3k/Lib/test/test_gdb.py
   python/branches/py3k/Misc/NEWS
   python/branches/py3k/Tools/gdb/libpython.py

Modified: python/branches/py3k/Lib/test/test_gdb.py
==============================================================================
--- python/branches/py3k/Lib/test/test_gdb.py	(original)
+++ python/branches/py3k/Lib/test/test_gdb.py	Wed Apr 21 00:32:07 2010
@@ -31,6 +31,19 @@
 if gdbpy_version == b'':
     raise unittest.SkipTest("gdb not built with embedded python support")
 
+def gdb_has_frame_select():
+    # Does this build of gdb have gdb.Frame.select ?
+    cmd = "--eval-command=python print(dir(gdb.Frame))"
+    p = subprocess.Popen(["gdb", "--batch", cmd],
+                         stdout=subprocess.PIPE)
+    stdout, _ = p.communicate()
+    m = re.match(br'.*\[(.*)\].*', stdout)
+    if not m:
+        raise unittest.SkipTest("Unable to parse output from gdb.Frame.select test")
+    gdb_frame_dir = m.group(1).split(b', ')
+    return b"'select'" in gdb_frame_dir
+
+HAS_PYUP_PYDOWN = gdb_has_frame_select()
 
 class DebuggerTests(unittest.TestCase):
 
@@ -554,6 +567,7 @@
                       bt)
 
 class StackNavigationTests(DebuggerTests):
+    @unittest.skipUnless(HAS_PYUP_PYDOWN, "test requires py-up/py-down commands")
     def test_pyup_command(self):
         'Verify that the "py-up" command works'
         bt = self.get_stack_trace(script='Lib/test/test_gdb_sample.py',
@@ -564,6 +578,7 @@
     baz\(a, b, c\)
 $''')
 
+    @unittest.skipUnless(HAS_PYUP_PYDOWN, "test requires py-up/py-down commands")
     def test_down_at_bottom(self):
         'Verify handling of "py-down" at the bottom of the stack'
         bt = self.get_stack_trace(script='Lib/test/test_gdb_sample.py',
@@ -571,6 +586,7 @@
         self.assertEndsWith(bt,
                             'Unable to find a newer python frame\n')
 
+    @unittest.skipUnless(HAS_PYUP_PYDOWN, "test requires py-up/py-down commands")
     def test_up_at_top(self):
         'Verify handling of "py-up" at the top of the stack'
         bt = self.get_stack_trace(script='Lib/test/test_gdb_sample.py',
@@ -578,6 +594,7 @@
         self.assertEndsWith(bt,
                             'Unable to find an older python frame\n')
 
+    @unittest.skipUnless(HAS_PYUP_PYDOWN, "test requires py-up/py-down commands")
     def test_up_then_down(self):
         'Verify "py-up" followed by "py-down"'
         bt = self.get_stack_trace(script='Lib/test/test_gdb_sample.py',
@@ -613,6 +630,7 @@
         self.assertMultilineMatches(bt,
                                     r".*\nlocal 'args' = \(1, 2, 3\)\n.*")
 
+    @unittest.skipUnless(HAS_PYUP_PYDOWN, "test requires py-up/py-down commands")
     def test_print_after_up(self):
         bt = self.get_stack_trace(script='Lib/test/test_gdb_sample.py',
                                   cmds_after_breakpoint=['py-up', 'py-print c', 'py-print b', 'py-print a'])
@@ -638,6 +656,7 @@
         self.assertMultilineMatches(bt,
                                     r".*\nargs = \(1, 2, 3\)\n.*")
 
+    @unittest.skipUnless(HAS_PYUP_PYDOWN, "test requires py-up/py-down commands")
     def test_locals_after_up(self):
         bt = self.get_stack_trace(script='Lib/test/test_gdb_sample.py',
                                   cmds_after_breakpoint=['py-up', 'py-locals'])

Modified: python/branches/py3k/Misc/NEWS
==============================================================================
--- python/branches/py3k/Misc/NEWS	(original)
+++ python/branches/py3k/Misc/NEWS	Wed Apr 21 00:32:07 2010
@@ -318,6 +318,8 @@
 Library
 -------
 
+- Issue #8437: Fix test_gdb failures, patch written by Dave Malcolm
+
 - Issue #6547: Added the ignore_dangling_symlinks option to shutil.copytree.
 
 - Issue #1540112: Now allowing the choice of a copy function in 

Modified: python/branches/py3k/Tools/gdb/libpython.py
==============================================================================
--- python/branches/py3k/Tools/gdb/libpython.py	(original)
+++ python/branches/py3k/Tools/gdb/libpython.py	Wed Apr 21 00:32:07 2010
@@ -1133,18 +1133,17 @@
         return index
 
     def is_evalframeex(self):
-        if self._gdbframe.function():
-            if self._gdbframe.function().name == 'PyEval_EvalFrameEx':
-                '''
-                I believe we also need to filter on the inline
-                struct frame_id.inline_depth, only regarding frames with
-                an inline depth of 0 as actually being this function
-
-                So we reject those with type gdb.INLINE_FRAME
-                '''
-                if self._gdbframe.type() == gdb.NORMAL_FRAME:
-                    # We have a PyEval_EvalFrameEx frame:
-                    return True
+        if self._gdbframe.name() == 'PyEval_EvalFrameEx':
+            '''
+            I believe we also need to filter on the inline
+            struct frame_id.inline_depth, only regarding frames with
+            an inline depth of 0 as actually being this function
+
+            So we reject those with type gdb.INLINE_FRAME
+            '''
+            if self._gdbframe.type() == gdb.NORMAL_FRAME:
+                # We have a PyEval_EvalFrameEx frame:
+                return True
 
         return False
 
@@ -1294,8 +1293,6 @@
     def invoke(self, args, from_tty):
         move_in_stack(move_up=True)
 
-PyUp()
-
 class PyDown(gdb.Command):
     'Select and print the python stack frame called by this one (if any)'
     def __init__(self):
@@ -1308,7 +1305,10 @@
     def invoke(self, args, from_tty):
         move_in_stack(move_up=False)
 
-PyDown()
+# Not all builds of gdb have gdb.Frame.select
+if hasattr(gdb.Frame, 'select'):
+    PyUp()
+    PyDown()
 
 class PyBacktrace(gdb.Command):
     'Display the current python frame and all the frames within its call stack (if any)'


More information about the Python-checkins mailing list