Skip to content

Commit

Permalink
[libcxx][pretty printers] Report not being able to trace test program
Browse files Browse the repository at this point in the history
If you don't have ptrace permissions this test will fail to run
silently, this adds a check for that and anything else that
might do similar things.

The output will now be:
```
FAILED test program did not run correctly, check gdb warnings

/usr/bin/gdb: warning: Couldn't determine a path for the index cache
directory.
No symbol table is loaded.  Use the "file" command.
warning: Error disabling address space randomization: Operation not
permitted
warning: Could not trace the inferior process.
warning: ptrace: Operation not permitted

error: command failed with exit status: 255
```

We already have a feature to check for a compatible python enabled
gdb, so I think it's reasonable to check for this at test runtime.

Note that this is different to the catch all at the end of the test
script. That would be a case where you can trace but something else
made it stop mid way that wasn't our test breakpoints.

Reviewed By: saugustine

Differential Revision: https://reviews.llvm.org/D110936
  • Loading branch information
DavidSpickett committed Oct 7, 2021
1 parent 202af50 commit 88f0889
Showing 1 changed file with 16 additions and 1 deletion.
17 changes: 16 additions & 1 deletion libcxx/test/libcxx/gdb/gdb_pretty_printer_test.py
Expand Up @@ -20,6 +20,14 @@
import sys

test_failures = 0
# Sometimes the inital run command can fail to trace the process.
# (e.g. you don't have ptrace permissions)
# In these cases gdb still sends us an exited event so we cannot
# see what "run" printed to check for a warning message, since
# we get taken to our exit handler before we can look.
# Instead check that at least one test has been run by the time
# we exit.
has_run_tests = False


class CheckResult(gdb.Command):
Expand All @@ -30,6 +38,8 @@ def __init__(self):

def invoke(self, arg, from_tty):
try:
has_run_tests = True

# Stack frame is:
# 0. StopForDebugger
# 1. ComparePrettyPrintToChars or ComparePrettyPrintToRegex
Expand Down Expand Up @@ -89,7 +99,12 @@ def _get_value_string(self, compare_frame, testcase_frame):

def exit_handler(event=None):
global test_failures
if test_failures:
global has_run_tests

if not has_run_tests:
print("FAILED test program did not run correctly, check gdb warnings")
test_failures = -1
elif test_failures:
print("FAILED %d cases" % test_failures)
exit(test_failures)

Expand Down

0 comments on commit 88f0889

Please sign in to comment.