mirror of
https://github.com/python/cpython.git
synced 2025-07-23 11:15:24 +00:00

[3.12] gh-109972: Enhance test_gdb (GH-110026) (GH-110351) * gh-109972: Enhance test_gdb (GH-110026) * Split test_pycfunction.py: add test_cfunction_full.py. Split the function into the following 6 functions. In verbose mode, these "pycfunction" tests now log each tested call. * test_pycfunction_noargs() * test_pycfunction_o() * test_pycfunction_varargs() * test_pycfunction_varargs_keywords() * test_pycfunction_fastcall() * test_pycfunction_fastcall_keywords() * Move get_gdb_repr() to PrettyPrintTests. * Replace DebuggerTests.get_sample_script() with SAMPLE_SCRIPT. * Rename checkout_hook_path to CHECKOUT_HOOK_PATH. * Rename gdb_version to GDB_VERSION_TEXT. * Replace (gdb_major_version, gdb_minor_version) with GDB_VERSION. * run_gdb() uses "backslashreplace" error handler instead of "replace". * Add check_gdb() function to util.py. * Enhance support.check_cflags_pgo(): check also for sysconfig PGO_PROF_USE_FLAG (if available) in compiler flags. * Move some SkipTest checks to test_gdb/__init__.py. * Elaborate why gdb cannot be tested on Windows: gdb doesn't support PDB debug symbol files. (cherry picked from commit757cbd4f29
) * gh-104736: Fix test_gdb tests on ppc64le with clang (GH-109360) Fix test_gdb on Python built with LLVM clang 16 on Linux ppc64le (ex: Fedora 38). Search patterns in gdb "bt" command output to detect when gdb fails to retrieve the traceback. For example, skip a test if "Backtrace stopped: frame did not save the PC" is found. (cherry picked from commit44d9a71ea2
) * gh-110166: Fix gdb CFunctionFullTests on ppc64le clang build (GH-110331) CFunctionFullTests now also runs "bt" command before "py-bt-full", similar to CFunctionTests which also runs "bt" command before "py-bt". So test_gdb can skip the test if patterns like "?? ()" are found in the gdb output. (cherry picked from commitbbce8bd05d
) Co-authored-by: Victor Stinner <vstinner@python.org> (cherry picked from commit1de9406f91
) Co-authored-by: Victor Stinner <vstinner@python.org>
36 lines
1,003 B
Python
36 lines
1,003 B
Python
"""
|
|
Similar to test_cfunction but test "py-bt-full" command.
|
|
"""
|
|
|
|
import re
|
|
|
|
from .util import setup_module
|
|
from .test_cfunction import CFunctionTests
|
|
|
|
|
|
def setUpModule():
|
|
setup_module()
|
|
|
|
|
|
class CFunctionFullTests(CFunctionTests):
|
|
def check(self, func_name, cmd):
|
|
# Verify with "py-bt-full":
|
|
gdb_output = self.get_stack_trace(
|
|
cmd,
|
|
breakpoint=func_name,
|
|
cmds_after_breakpoint=['bt', 'py-bt-full'],
|
|
# bpo-45207: Ignore 'Function "meth_varargs" not
|
|
# defined.' message in stderr.
|
|
ignore_stderr=True,
|
|
)
|
|
|
|
# bpo-46600: If the compiler inlines _null_to_none() in
|
|
# meth_varargs() (ex: clang -Og), _null_to_none() is the
|
|
# frame #1. Otherwise, meth_varargs() is the frame #1.
|
|
regex = r'#(1|2)'
|
|
regex += re.escape(f' <built-in method {func_name}')
|
|
self.assertRegex(gdb_output, regex)
|
|
|
|
|
|
# Delete the test case, otherwise it's executed twice
|
|
del CFunctionTests
|