bpo-37362: test_gdb now ignores stderr (GH-14287)
authorVictor Stinner <vstinner@redhat.com>
Fri, 21 Jun 2019 21:17:30 +0000 (23:17 +0200)
committerGitHub <noreply@github.com>
Fri, 21 Jun 2019 21:17:30 +0000 (23:17 +0200)
test_gdb no longer fails if it gets an "unexpected" message on
stderr: it now ignores stderr. The purpose of test_gdb is to test
that python-gdb.py commands work as expected, not to test gdb.

Lib/test/test_gdb.py
Misc/NEWS.d/next/Tests/2019-06-21-15-47-33.bpo-37362.D3xppx.rst [new file with mode: 0644]

index f57e348b6c144c7b32167260f5961d24cfef9416..1c5e18b678ca7f761de2b2512e6ef99f600c82a9 100644 (file)
@@ -214,43 +214,22 @@ class DebuggerTests(unittest.TestCase):
         elif script:
             args += [script]
 
-        # print args
-        # print (' '.join(args))
-
         # Use "args" to invoke gdb, capturing stdout, stderr:
         out, err = run_gdb(*args, PYTHONHASHSEED=PYTHONHASHSEED)
 
-        errlines = err.splitlines()
-        unexpected_errlines = []
-
-        # Ignore some benign messages on stderr.
-        ignore_patterns = (
-            'Function "%s" not defined.' % breakpoint,
-            'Do you need "set solib-search-path" or '
-            '"set sysroot"?',
-            # BFD: /usr/lib/debug/(...): unable to initialize decompress
-            # status for section .debug_aranges
-            'BFD: ',
-            # ignore all warnings
-            'warning: ',
-            )
-        for line in errlines:
-            if not line:
-                continue
-            # bpo34007: Sometimes some versions of the shared libraries that
-            # are part of the traceback are compiled in optimised mode and the
-            # Program Counter (PC) is not present, not allowing gdb to walk the
-            # frames back. When this happens, the Python bindings of gdb raise
-            # an exception, making the test impossible to succeed.
-            if "PC not saved" in line:
-                raise unittest.SkipTest("gdb cannot walk the frame object"
-                                        " because the Program Counter is"
-                                        " not present")
-            if not line.startswith(ignore_patterns):
-                unexpected_errlines.append(line)
-
-        # Ensure no unexpected error messages:
-        self.assertEqual(unexpected_errlines, [])
+        for line in err.splitlines():
+            print(line, file=sys.stderr)
+
+        # bpo-34007: Sometimes some versions of the shared libraries that
+        # are part of the traceback are compiled in optimised mode and the
+        # Program Counter (PC) is not present, not allowing gdb to walk the
+        # frames back. When this happens, the Python bindings of gdb raise
+        # an exception, making the test impossible to succeed.
+        if "PC not saved" in err:
+            raise unittest.SkipTest("gdb cannot walk the frame object"
+                                    " because the Program Counter is"
+                                    " not present")
+
         return out
 
     def get_gdb_repr(self, source,
diff --git a/Misc/NEWS.d/next/Tests/2019-06-21-15-47-33.bpo-37362.D3xppx.rst b/Misc/NEWS.d/next/Tests/2019-06-21-15-47-33.bpo-37362.D3xppx.rst
new file mode 100644 (file)
index 0000000..43fdc10
--- /dev/null
@@ -0,0 +1,3 @@
+test_gdb no longer fails if it gets an "unexpected" message on stderr: it now
+ignores stderr. The purpose of test_gdb is to test that python-gdb.py commands
+work as expected, not to test gdb.