cpython: b71cda2f48c6 (original) (raw)

--- a/Lib/test/test_gdb.py +++ b/Lib/test/test_gdb.py @@ -19,39 +19,57 @@ except OSError: # This is what "no gdb" looks like. There may, however, be other # errors that manifest this way too. raise unittest.SkipTest("Couldn't find gdb on the path") -gdb_version_number = re.search(b"^GNU gdb [^\d](\d+).", gdb_version) -if int(gdb_version_number.group(1)) < 7: +gdb_version_number = re.search(b"^GNU gdb [^\d](\d+).(\d)", gdb_version) +gdb_major_version = int(gdb_version_number.group(1)) +gdb_minor_version = int(gdb_version_number.group(2)) +if gdb_major_version < 7: raise unittest.SkipTest("gdb versions before 7.0 didn't support python embedding" " Saw:\n" + gdb_version.decode('ascii', 'replace')) +# Location of custom hooks file in a repository checkout. +checkout_hook_path = os.path.join(os.path.dirname(sys.executable),

+ +def run_gdb(*args, **env_vars):

+

+

Verify that "gdb" was built with the embedded python support enabled:

-cmd = "--eval-command=python import sys; print sys.version_info" -p = subprocess.Popen(["gdb", "--batch", cmd],

-gdbpy_version, _ = p.communicate() -if gdbpy_version == b'': +gdbpy_version, _ = run_gdb("--eval-command=python import sys; print sys.version_info") +if not gdbpy_version: raise unittest.SkipTest("gdb not built with embedded python support") -# Verify that "gdb" can load our custom hooks -p = subprocess.Popen(["gdb", "--batch", cmd,

-__, gdbpy_errors = p.communicate() -if b"auto-loading has been declined" in gdbpy_errors:

+# Verify that "gdb" can load our custom hooks. In theory this should never +# fail, but we don't handle the case of the hooks file not existing if the +# tests are run from an installed Python (we'll produce failures in that case). +cmd = ['--args', sys.executable] +_, gdbpy_errors = run_gdb('--args', sys.executable) +if "auto-loading has been declined" in gdbpy_errors:

def gdb_has_frame_select(): # Does this build of gdb have gdb.Frame.select ?

HAS_PYUP_PYDOWN = gdb_has_frame_select() @@ -61,21 +79,6 @@ class DebuggerTests(unittest.TestCase): """Test that the debugger can debug Python."""

-

- def get_stack_trace(self, source=None, script=None, breakpoint=BREAKPOINT_FN, cmds_after_breakpoint=None, @@ -132,7 +135,7 @@ class DebuggerTests(unittest.TestCase): # print ' '.join(args) # Use "args" to invoke gdb, capturing stdout, stderr:

# Ignore some noise on stderr due to the pending breakpoint: err = err.replace('Function "%s" not defined.\n' % breakpoint, '') @@ -149,6 +152,11 @@ class DebuggerTests(unittest.TestCase): 'Do you need "set solib-search-path" or ' '"set sysroot"?\n', '')

# Ensure no unexpected error messages: self.assertEqual(err, '')