summaryrefslogtreecommitdiffstats
path: root/Lib/test/test_faulthandler.py
diff options
context:
space:
mode:
authorVictor Stinner <vstinner@python.org>2021-01-18 19:47:13 (GMT)
committerGitHub <noreply@github.com>2021-01-18 19:47:13 (GMT)
commit250035d134ad482e724f73ce654682254b513ee0 (patch)
tree48d2b3627adfe0b0e04aaaee25f35f4999cde254 /Lib/test/test_faulthandler.py
parentf7b5bacd7a0b2084ce699eda6f6f4b1adfa16590 (diff)
downloadcpython-250035d134ad482e724f73ce654682254b513ee0.zip
cpython-250035d134ad482e724f73ce654682254b513ee0.tar.gz
cpython-250035d134ad482e724f73ce654682254b513ee0.tar.bz2
bpo-42923: Dump extension modules on fatal error (GH-24207)
The Py_FatalError() function and the faulthandler module now dump the list of extension modules on a fatal error. Add _Py_DumpExtensionModules() and _PyModule_IsExtension() internal functions.
Diffstat (limited to 'Lib/test/test_faulthandler.py')
-rw-r--r--Lib/test/test_faulthandler.py19
1 files changed, 19 insertions, 0 deletions
diff --git a/Lib/test/test_faulthandler.py b/Lib/test/test_faulthandler.py
index bc61aab..c6b763a 100644
--- a/Lib/test/test_faulthandler.py
+++ b/Lib/test/test_faulthandler.py
@@ -2,6 +2,7 @@ from contextlib import contextmanager
import datetime
import faulthandler
import os
+import re
import signal
import subprocess
import sys
@@ -329,6 +330,24 @@ class FaultHandlerTests(unittest.TestCase):
"%r is present in %r" % (not_expected, stderr))
self.assertNotEqual(exitcode, 0)
+ @skip_segfault_on_android
+ def test_dump_ext_modules(self):
+ code = """
+ import faulthandler
+ faulthandler.enable()
+ faulthandler._sigsegv()
+ """
+ stderr, exitcode = self.get_output(code)
+ stderr = '\n'.join(stderr)
+ match = re.search('^Extension modules:(.*)$', stderr, re.MULTILINE)
+ if not match:
+ self.fail(f"Cannot find 'Extension modules:' in {stderr!r}")
+ modules = set(match.group(1).strip().split(', '))
+ # Only check for a few extensions, the list doesn't have to be
+ # exhaustive.
+ for ext in ('sys', 'builtins', '_io', 'faulthandler'):
+ self.assertIn(ext, modules)
+
def test_is_enabled(self):
orig_stderr = sys.stderr
try: