Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
47 changes: 13 additions & 34 deletions Lib/test/test_gdb.py
Original file line number Diff line number Diff line change
Expand Up @@ -214,43 +214,22 @@ def get_stack_trace(self, source=None, script=None,
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,
Expand Down
Original file line number Diff line number Diff line change
@@ -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.