python / python/cpython

Tail call interpreter makes test_gdb fail on -O0 optimization level

Open
#150,206 4 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

interpreter-core type-bug
Dominant language
Python
Stars
77.2k
Forks
35.9k
PR merge metrics
PR metrics pending

Description

Bug report

Bug description:

Found it when accidentally compiled our debug Python build in Fedora with the tail call interpreter. Reproduced the failures with GDB 17.1:

GCC 16.1.1 with -O0 (lower gcc versions don't support the tail call interpreter)
Clang 21.1.8 with -O0

either
./configure --with-tail-call-interp CFLAGS="-O0" && make -j
or
CC=clang ./configure --with-tail-call-interp CFLAGS="-O0" && make -j

and
./python -m test -wW test_gdb

Snippet:

======================================================================
FAIL: test_bt (test.test_gdb.test_backtrace.PyBtTests.test_bt)
Verify that the "py-bt" command works
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/cstratak/cpython/Lib/test/test_gdb/test_backtrace.py", line 20, in test_bt
            self.assertMultilineMatches(bt,
            ~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^
                                        r'''^.*
                                        ^^^^^^^
    ...<9 lines>...
        foo\(1, 2, 3\)
        ^^^^^^^^^^^^^^
    ''')
    ^^^^
  File "/home/cstratak/cpython/Lib/test/test_gdb/util.py", line 303, in assertMultilineMatches
    self.fail(msg='%r did not match %r' % (actual, pattern))
    ~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AssertionError: 'Breakpoint 1 at 0x63b15e: file Python/clinic/bltinmodule.c.h, line 751.\n\nThis GDB supports auto-downloading debuginfo from the following URLs:\n  <ima:enforcing>\n  <https://debuginfod.fedoraproject.org/>\n  <ima:ignore>\nEnable debuginfod for this session? (y or [n]) [answered N; input not from terminal]\nDebuginfod has been disabled.\nTo make this setting permanent, add \'set debuginfod enabled off\' to .gdbinit.\n[Thread debugging using libthread_db enabled]\nUsing host libthread_db library "/lib64/libthread_db.so.1".\n\nBreakpoint 1, builtin_id (self=<module at remote 0x7ffff7b9fbc0>, v=42) at Python/clinic/bltinmodule.c.h:751\n751\t    PyObject *return_value = NULL;\nTraceback (most recent call first):\n  <built-in method id of module object at remote 0x7ffff7b9fbc0>\n  File "/home/cstratak/cpython/Lib/test/test_gdb/gdb_sample.py", line 12, in <module>\n    foo(1, 2, 3)\n' did not match '^.*\nTraceback \\(most recent call first\\):\n  <built-in method id of module object .*>\n  File ".*gdb_sample.py", line 10, in baz\n    id\\(42\\)\n  File ".*gdb_sample.py", line 7, in bar\n    baz\\(a, b, c\\)\n  File ".*gdb_sample.py", line 4, in foo\n    bar\\(a=a, b=b, c=c\\)\n  File ".*gdb_sample.py", line 12, in <module>\n    foo\\(1, 2, 3\\)\n'

full log
== CPython 3.16.0a0 (heads/main:32104a11e34, May 22 2026, 00:24:18) [Clang 21.1.8 (Fedora 21.1.8-4.fc43)]
== Linux-7.0.9-102.fc43.x86_64-x86_64-with-glibc2.42 little-endian
== Python build: release
== cwd: /home/charis/dev/tail-call/build/test_python_worker_415108æ
== CPU count: 22
== encodings: locale=UTF-8 FS=utf-8
== resources: all test resources are disabled, use -u option to unskip tests

Using random seed: 173219791
0:00:00 load avg: 0.83 Run 6 tests sequentially in a single process
0:00:00 load avg: 0.83 [1/6] test_gdb.test_backtrace
gdb version 17.1:
    GNU gdb (Fedora Linux) 17.1-4.fc43
    Copyright (C) 2025 Free Software Foundation, Inc.
    License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
    This is free software: you are free to change and redistribute it.
    There is NO WARRANTY, to the extent permitted by law.
    path: /usr/bin/gdb

test_bt (test.test_gdb.test_backtrace.PyBtTests.test_bt)
Verify that the "py-bt" command works ... FAIL
test_bt_full (test.test_gdb.test_backtrace.PyBtTests.test_bt_full)
Verify that the "py-bt-full" command works ... FAIL
test_gc (test.test_gdb.test_backtrace.PyBtTests.test_gc)
Verify that "py-bt" indicates if a thread is garbage-collecting ... ok
test_threads (test.test_gdb.test_backtrace.PyBtTests.test_threads)
Verify that "py-bt" indicates threads that are waiting for the GIL ... skipped "resource 'cpu' is not enabled"
test_wrapper_call (test.test_gdb.test_backtrace.PyBtTests.test_wrapper_call) ... ok

======================================================================
FAIL: test_bt (test.test_gdb.test_backtrace.PyBtTests.test_bt)
Verify that the "py-bt" command works
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/charis/dev/tail-call/Lib/test/test_gdb/test_backtrace.py", line 20, in test_bt
            self.assertMultilineMatches(bt,
            ~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^
                                        r'''^.*
                                        ^^^^^^^
    ...<9 lines>...
        foo\(1, 2, 3\)
        ^^^^^^^^^^^^^^
    ''')
    ^^^^
  File "/home/charis/dev/tail-call/Lib/test/test_gdb/util.py", line 303, in assertMultilineMatches
    self.fail(msg='%r did not match %r' % (actual, pattern))
    ~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AssertionError: 'Breakpoint 1 at 0x585610: file Python/clinic/bltinmodule.c.h, line 753.\n\nThis GDB supports auto-downloading debuginfo from the following URLs:\n  <ima:enforcing>\n  <https://debuginfod.fedoraproject.org/>\n  <ima:ignore>\n  <https://debuginfod.usersys.redhat.com/>\nEnable debuginfod for this session? (y or [n]) [answered N; input not from terminal]\nDebuginfod has been disabled.\nTo make this setting permanent, add \'set debuginfod enabled off\' to .gdbinit.\n[Thread debugging using libthread_db enabled]\nUsing host libthread_db library "/lib64/libthread_db.so.1".\n\nBreakpoint 1, builtin_id (self=<module at remote 0x7fffe9d0bbc0>, v=42) at Python/clinic/bltinmodule.c.h:753\n753\t    return_value = builtin_id_impl((PyModuleDef *)self, v);\nTraceback (most recent call first):\n  <built-in method id of module object at remote 0x7fffe9d0bbc0>\n  File "/home/charis/dev/tail-call/Lib/test/test_gdb/gdb_sample.py", line 12, in <module>\n    foo(1, 2, 3)\n' did not match '^.*\nTraceback \\(most recent call first\\):\n  <built-in method id of module object .*>\n  File ".*gdb_sample.py", line 10, in baz\n    id\\(42\\)\n  File ".*gdb_sample.py", line 7, in bar\n    baz\\(a, b, c\\)\n  File ".*gdb_sample.py", line 4, in foo\n    bar\\(a=a, b=b, c=c\\)\n  File ".*gdb_sample.py", line 12, in <module>\n    foo\\(1, 2, 3\\)\n'

======================================================================
FAIL: test_bt_full (test.test_gdb.test_backtrace.PyBtTests.test_bt_full)
Verify that the "py-bt-full" command works
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/charis/dev/tail-call/Lib/test/test_gdb/test_backtrace.py", line 40, in test_bt_full
            self.assertMultilineMatches(bt,
            ~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^
                                        r'''^.*
                                        ^^^^^^^
    ...<5 lines>...
        foo\(1, 2, 3\)
        ^^^^^^^^^^^^^^
    ''')
    ^^^^
  File "/home/charis/dev/tail-call/Lib/test/test_gdb/util.py", line 303, in assertMultilineMatches
    self.fail(msg='%r did not match %r' % (actual, pattern))
    ~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AssertionError: 'Breakpoint 1 at 0x585610: file Python/clinic/bltinmodule.c.h, line 753.\n\nThis GDB supports auto-downloading debuginfo from the following URLs:\n  <ima:enforcing>\n  <https://debuginfod.fedoraproject.org/>\n  <ima:ignore>\n  <https://debuginfod.usersys.redhat.com/>\nEnable debuginfod for this session? (y or [n]) [answered N; input not from terminal]\nDebuginfod has been disabled.\nTo make this setting permanent, add \'set debuginfod enabled off\' to .gdbinit.\n[Thread debugging using libthread_db enabled]\nUsing host libthread_db library "/lib64/libthread_db.so.1".\n\nBreakpoint 1, builtin_id (self=<module at remote 0x7fffe9d0bbc0>, v=42) at Python/clinic/bltinmodule.c.h:753\n753\t    return_value = builtin_id_impl((PyModuleDef *)self, v);\nTraceback (most recent call first):\n#1 <built-in method id of module object at remote 0x7fffe9d0bbc0>\n#6 Frame 0x7ffff7fb2020, for file /home/charis/dev/tail-call/Lib/test/test_gdb/gdb_sample.py, line 12, in <module> ()\n    foo(1, 2, 3)\n' did not match '^.*\n#[0-9]+ Frame 0x-?[0-9a-f]+, for file .*gdb_sample.py, line 7, in bar \\(a=1, b=2, c=3\\)\n    baz\\(a, b, c\\)\n#[0-9]+ Frame 0x-?[0-9a-f]+, for file .*gdb_sample.py, line 4, in foo \\(a=1, b=2, c=3\\)\n    bar\\(a=a, b=b, c=c\\)\n#[0-9]+ Frame 0x-?[0-9a-f]+, for file .*gdb_sample.py, line 12, in <module> \\(\\)\n    foo\\(1, 2, 3\\)\n'

----------------------------------------------------------------------
Ran 5 tests in 0.834s

FAILED (failures=2, skipped=1)
test test_gdb.test_backtrace failed
0:00:00 load avg: 0.83 [1/6/1] test_gdb.test_backtrace failed (2 failures)
0:00:00 load avg: 0.83 [2/6/1] test_gdb.test_cfunction
gdb version 17.1:
    GNU gdb (Fedora Linux) 17.1-4.fc43
    Copyright (C) 2025 Free Software Foundation, Inc.
    License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
    This is free software: you are free to change and redistribute it.
    There is NO WARRANTY, to the extent permitted by law.
    path: /usr/bin/gdb

test_pycfunction_fastcall (test.test_gdb.test_cfunction.CFunctionTests.test_pycfunction_fastcall) ... skipped "resource 'cpu' is not enabled"
test_pycfunction_fastcall_keywords (test.test_gdb.test_cfunction.CFunctionTests.test_pycfunction_fastcall_keywords) ... skipped "resource 'cpu' is not enabled"
test_pycfunction_noargs (test.test_gdb.test_cfunction.CFunctionTests.test_pycfunction_noargs) ... skipped "resource 'cpu' is not enabled"
test_pycfunction_o (test.test_gdb.test_cfunction.CFunctionTests.test_pycfunction_o) ... skipped "resource 'cpu' is not enabled"
test_pycfunction_varargs (test.test_gdb.test_cfunction.CFunctionTests.test_pycfunction_varargs) ... skipped "resource 'cpu' is not enabled"
test_pycfunction_varargs_keywords (test.test_gdb.test_cfunction.CFunctionTests.test_pycfunction_varargs_keywords) ... skipped "resource 'cpu' is not enabled"

----------------------------------------------------------------------
Ran 6 tests in 0.000s

OK (skipped=6)
0:00:01 load avg: 0.83 [2/6/1] test_gdb.test_cfunction passed
0:00:01 load avg: 0.83 [3/6/1] test_gdb.test_cfunction_full
gdb version 17.1:
    GNU gdb (Fedora Linux) 17.1-4.fc43
    Copyright (C) 2025 Free Software Foundation, Inc.
    License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
    This is free software: you are free to change and redistribute it.
    There is NO WARRANTY, to the extent permitted by law.
    path: /usr/bin/gdb

test_pycfunction_fastcall (test.test_gdb.test_cfunction_full.CFunctionFullTests.test_pycfunction_fastcall) ... skipped "resource 'cpu' is not enabled"
test_pycfunction_fastcall_keywords (test.test_gdb.test_cfunction_full.CFunctionFullTests.test_pycfunction_fastcall_keywords) ... skipped "resource 'cpu' is not enabled"
test_pycfunction_noargs (test.test_gdb.test_cfunction_full.CFunctionFullTests.test_pycfunction_noargs) ... skipped "resource 'cpu' is not enabled"
test_pycfunction_o (test.test_gdb.test_cfunction_full.CFunctionFullTests.test_pycfunction_o) ... skipped "resource 'cpu' is not enabled"
test_pycfunction_varargs (test.test_gdb.test_cfunction_full.CFunctionFullTests.test_pycfunction_varargs) ... skipped "resource 'cpu' is not enabled"
test_pycfunction_varargs_keywords (test.test_gdb.test_cfunction_full.CFunctionFullTests.test_pycfunction_varargs_keywords) ... skipped "resource 'cpu' is not enabled"

----------------------------------------------------------------------
Ran 6 tests in 0.000s

OK (skipped=6)
0:00:01 load avg: 0.83 [3/6/1] test_gdb.test_cfunction_full passed
0:00:01 load avg: 0.83 [4/6/1] test_gdb.test_jit
gdb version 17.1:
    GNU gdb (Fedora Linux) 17.1-4.fc43
    Copyright (C) 2025 Free Software Foundation, Inc.
    License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
    This is free software: you are free to change and redistribute it.
    There is NO WARRANTY, to the extent permitted by law.
    path: /usr/bin/gdb

test_bt_handoff_from_jit_entry_to_executor (test.test_gdb.test_jit.JitBacktraceTests.test_bt_handoff_from_jit_entry_to_executor) ... skipped 'requires native JIT execution active'
test_bt_unwinds_from_inside_jit_executor (test.test_gdb.test_jit.JitBacktraceTests.test_bt_unwinds_from_inside_jit_executor) ... skipped 'requires native JIT execution active'
test_bt_unwinds_through_jit_frames (test.test_gdb.test_jit.JitBacktraceTests.test_bt_unwinds_through_jit_frames) ... skipped 'requires native JIT execution active'

----------------------------------------------------------------------
Ran 3 tests in 0.000s

OK (skipped=3)
0:00:01 load avg: 0.83 [4/6/1] test_gdb.test_jit passed
0:00:01 load avg: 0.83 [5/6/1] test_gdb.test_misc
gdb version 17.1:
    GNU gdb (Fedora Linux) 17.1-4.fc43
    Copyright (C) 2025 Free Software Foundation, Inc.
    License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
    This is free software: you are free to change and redistribute it.
    There is NO WARRANTY, to the extent permitted by law.
    path: /usr/bin/gdb

test_basic_command (test.test_gdb.test_misc.PyListTests.test_basic_command)
Verify that the "py-list" command works ... FAIL
test_one_abs_arg (test.test_gdb.test_misc.PyListTests.test_one_abs_arg)
Verify the "py-list" command with one absolute argument ... FAIL
test_two_abs_args (test.test_gdb.test_misc.PyListTests.test_two_abs_args)
Verify the "py-list" command with two absolute arguments ... ok
test_basic_command (test.test_gdb.test_misc.PyLocalsTests.test_basic_command) ... FAIL
test_locals_after_up (test.test_gdb.test_misc.PyLocalsTests.test_locals_after_up) ... FAIL
test_basic_command (test.test_gdb.test_misc.PyPrintTests.test_basic_command)
Verify that the "py-print" command works ... ok
test_print_after_up (test.test_gdb.test_misc.PyPrintTests.test_print_after_up) ... skipped "'Unable to read information on python frame' found in gdb output"
test_printing_builtin (test.test_gdb.test_misc.PyPrintTests.test_printing_builtin) ... ok
test_printing_global (test.test_gdb.test_misc.PyPrintTests.test_printing_global) ... ok
test_down_at_bottom (test.test_gdb.test_misc.StackNavigationTests.test_down_at_bottom)
Verify handling of "py-down" at the bottom of the stack ... ok
test_pyup_command (test.test_gdb.test_misc.StackNavigationTests.test_pyup_command)
Verify that the "py-up" command works ... ok
test_up_at_top (test.test_gdb.test_misc.StackNavigationTests.test_up_at_top)
Verify handling of "py-up" at the top of the stack ... ok
test_up_then_down (test.test_gdb.test_misc.StackNavigationTests.test_up_then_down)
Verify "py-up" followed by "py-down" ... ok

======================================================================
FAIL: test_basic_command (test.test_gdb.test_misc.PyListTests.test_basic_command)
Verify that the "py-list" command works
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/charis/dev/tail-call/Lib/test/test_gdb/test_misc.py", line 38, in test_basic_command
    self.assertListing('   5    \n'
    ~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^
                       '   6    def bar(a, b, c):\n'
                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<5 lines>...
                       '  12    foo(1, 2, 3)\n',
                       ^^^^^^^^^^^^^^^^^^^^^^^^^
                       bt)
                       ^^^
  File "/home/charis/dev/tail-call/Lib/test/test_gdb/test_misc.py", line 31, in assertListing
    self.assertEndsWith(actual, expected)
    ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^
AssertionError: 'Breakpoint 1 at 0x585610: file Python/clinic/bltinmodule.c.h, line 753.\n\nThis [truncated]... doesn't end with '   5    \n   6    def bar(a, b, c):\n   7        baz(a, b, c)\n   8    \n   9    def baz(*args):\n >10        id(42)\n  11    \n  12    foo(1, 2, 3)\n'

======================================================================
FAIL: test_one_abs_arg (test.test_gdb.test_misc.PyListTests.test_one_abs_arg)
Verify the "py-list" command with one absolute argument
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/charis/dev/tail-call/Lib/test/test_gdb/test_misc.py", line 53, in test_one_abs_arg
    self.assertListing('   9    def baz(*args):\n'
    ~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^
                       ' >10        id(42)\n'
                       ^^^^^^^^^^^^^^^^^^^^^^
                       '  11    \n'
                       ^^^^^^^^^^^^
                       '  12    foo(1, 2, 3)\n',
                       ^^^^^^^^^^^^^^^^^^^^^^^^^
                       bt)
                       ^^^
  File "/home/charis/dev/tail-call/Lib/test/test_gdb/test_misc.py", line 31, in assertListing
    self.assertEndsWith(actual, expected)
    ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^
AssertionError: 'Breakpoint 1 at 0x585610: file Python/clinic/bltinmodule.c.h, line 753.\n\nThis [truncated]... doesn't end with '   9    def baz(*args):\n >10        id(42)\n  11    \n  12    foo(1, 2, 3)\n'

======================================================================
FAIL: test_basic_command (test.test_gdb.test_misc.PyLocalsTests.test_basic_command)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/charis/dev/tail-call/Lib/test/test_gdb/test_misc.py", line 172, in test_basic_command
    self.assertMultilineMatches(bt,
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^
                                r".*\nargs = \(1, 2, 3\)\n.*")
                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/charis/dev/tail-call/Lib/test/test_gdb/util.py", line 303, in assertMultilineMatches
    self.fail(msg='%r did not match %r' % (actual, pattern))
    ~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AssertionError: 'Breakpoint 1 at 0x585610: file Python/clinic/bltinmodule.c.h, line 753.\n\nThis GDB supports auto-downloading debuginfo from the following URLs:\n  <ima:enforcing>\n  <https://debuginfod.fedoraproject.org/>\n  <ima:ignore>\n  <https://debuginfod.usersys.redhat.com/>\nEnable debuginfod for this session? (y or [n]) [answered N; input not from terminal]\nDebuginfod has been disabled.\nTo make this setting permanent, add \'set debuginfod enabled off\' to .gdbinit.\n[Thread debugging using libthread_db enabled]\nUsing host libthread_db library "/lib64/libthread_db.so.1".\n\nBreakpoint 1, builtin_id (self=<module at remote 0x7fffe9d0bbc0>, v=42) at Python/clinic/bltinmodule.c.h:753\n753\t    return_value = builtin_id_impl((PyModuleDef *)self, v);\n#6 Frame 0x7ffff7fb2020, for file /home/charis/dev/tail-call/Lib/test/test_gdb/gdb_sample.py, line 12, in <module> ()\n    foo(1, 2, 3)\nLocals for <module>\n' did not match '.*\\nargs = \\(1, 2, 3\\)\\n.*'

======================================================================
FAIL: test_locals_after_up (test.test_gdb.test_misc.PyLocalsTests.test_locals_after_up)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/charis/dev/tail-call/Lib/test/test_gdb/test_misc.py", line 181, in test_locals_after_up
            self.assertMultilineMatches(bt,
            ~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^
                                        r'''^.*
                                        ^^^^^^^
    ...<4 lines>...
    Locals for <module>
    ^^^^^^^^^^^^^^^^^^^
    .*$''')
    ^^^^^^^
  File "/home/charis/dev/tail-call/Lib/test/test_gdb/util.py", line 303, in assertMultilineMatches
    self.fail(msg='%r did not match %r' % (actual, pattern))
    ~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AssertionError: 'Breakpoint 1 at 0x585610: file Python/clinic/bltinmodule.c.h, line 753.\n\nThis GDB supports auto-downloading debuginfo from the following URLs:\n  <ima:enforcing>\n  <https://debuginfod.fedoraproject.org/>\n  <ima:ignore>\n  <https://debuginfod.usersys.redhat.com/>\nEnable debuginfod for this session? (y or [n]) [answered N; input not from terminal]\nDebuginfod has been disabled.\nTo make this setting permanent, add \'set debuginfod enabled off\' to .gdbinit.\n[Thread debugging using libthread_db enabled]\nUsing host libthread_db library "/lib64/libthread_db.so.1".\n\nBreakpoint 1, builtin_id (self=<module at remote 0x7fffe9d0bbc0>, v=42) at Python/clinic/bltinmodule.c.h:753\n753\t    return_value = builtin_id_impl((PyModuleDef *)self, v);\n#6 Frame 0x7ffff7fb2020, for file /home/charis/dev/tail-call/Lib/test/test_gdb/gdb_sample.py, line 12, in <module> ()\n    foo(1, 2, 3)\nUnable to find an older python frame\nLocals for <module>\n' did not match '^.*\nLocals for foo\na = 1\nb = 2\nc = 3\nLocals for <module>\n.*$'

----------------------------------------------------------------------
Ran 13 tests in 1.931s

FAILED (failures=4, skipped=1)
test test_gdb.test_misc failed
0:00:03 load avg: 0.93 [5/6/2] test_gdb.test_misc failed (4 failures)
0:00:03 load avg: 0.93 [6/6/2] test_gdb.test_pretty_print
gdb version 17.1:
    GNU gdb (Fedora Linux) 17.1-4.fc43
    Copyright (C) 2025 Free Software Foundation, Inc.
    License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
    This is free software: you are free to change and redistribute it.
    There is NO WARRANTY, to the extent permitted by law.
    path: /usr/bin/gdb

test_NULL_ob_type (test.test_gdb.test_pretty_print.PrettyPrintTests.test_NULL_ob_type)
Ensure that a PyObject* with NULL ob_type is handled gracefully ... ok
test_NULL_ptr (test.test_gdb.test_pretty_print.PrettyPrintTests.test_NULL_ptr)
Ensure that a NULL PyObject* is handled gracefully ... ok
test_builtin_method (test.test_gdb.test_pretty_print.PrettyPrintTests.test_builtin_method) ... ok
test_builtins_help (test.test_gdb.test_pretty_print.PrettyPrintTests.test_builtins_help)
Ensure that the new-style class _Helper in site.py can be handled ... ok
test_bytes (test.test_gdb.test_pretty_print.PrettyPrintTests.test_bytes)
Verify the pretty-printing of bytes ... skipped "resource 'cpu' is not enabled"
test_corrupt_ob_type (test.test_gdb.test_pretty_print.PrettyPrintTests.test_corrupt_ob_type)
Ensure that a PyObject* with a corrupt ob_type is handled gracefully ... ok
test_corrupt_tp_flags (test.test_gdb.test_pretty_print.PrettyPrintTests.test_corrupt_tp_flags)
Ensure that a PyObject* with a type with corrupt tp_flags is handled ... ok
test_corrupt_tp_name (test.test_gdb.test_pretty_print.PrettyPrintTests.test_corrupt_tp_name)
Ensure that a PyObject* with a type with corrupt tp_name is handled ... ok
test_dicts (test.test_gdb.test_pretty_print.PrettyPrintTests.test_dicts)
Verify the pretty-printing of dictionaries ... ok
test_exceptions (test.test_gdb.test_pretty_print.PrettyPrintTests.test_exceptions) ... ok
test_frames (test.test_gdb.test_pretty_print.PrettyPrintTests.test_frames) ... ok
test_frozensets (test.test_gdb.test_pretty_print.PrettyPrintTests.test_frozensets)
Verify the pretty-printing of frozensets ... skipped "resource 'cpu' is not enabled"
test_getting_backtrace (test.test_gdb.test_pretty_print.PrettyPrintTests.test_getting_backtrace) ... ok
test_int (test.test_gdb.test_pretty_print.PrettyPrintTests.test_int)
Verify the pretty-printing of various int values ... skipped "resource 'cpu' is not enabled"
test_lists (test.test_gdb.test_pretty_print.PrettyPrintTests.test_lists)
Verify the pretty-printing of lists ... ok
test_modern_class (test.test_gdb.test_pretty_print.PrettyPrintTests.test_modern_class)
Verify the pretty-printing of new-style class instances ... ok
test_selfreferential_dict (test.test_gdb.test_pretty_print.PrettyPrintTests.test_selfreferential_dict)
Ensure that a reference loop involving a dict doesn't lead proxyval ... ok
test_selfreferential_list (test.test_gdb.test_pretty_print.PrettyPrintTests.test_selfreferential_list)
Ensure that a reference loop involving a list doesn't lead proxyval ... ok
test_selfreferential_new_style_instance (test.test_gdb.test_pretty_print.PrettyPrintTests.test_selfreferential_new_style_instance) ... ok
test_selfreferential_old_style_instance (test.test_gdb.test_pretty_print.PrettyPrintTests.test_selfreferential_old_style_instance) ... ok
test_sets (test.test_gdb.test_pretty_print.PrettyPrintTests.test_sets)
Verify the pretty-printing of sets ... skipped "resource 'cpu' is not enabled"
test_singletons (test.test_gdb.test_pretty_print.PrettyPrintTests.test_singletons)
Verify the pretty-printing of True, False and None ... ok
test_strings (test.test_gdb.test_pretty_print.PrettyPrintTests.test_strings)
Verify the pretty-printing of unicode strings ... skipped "resource 'cpu' is not enabled"
test_subclassing_list (test.test_gdb.test_pretty_print.PrettyPrintTests.test_subclassing_list)
Verify the pretty-printing of an instance of a list subclass ... ok
test_subclassing_tuple (test.test_gdb.test_pretty_print.PrettyPrintTests.test_subclassing_tuple)
Verify the pretty-printing of an instance of a tuple subclass ... ok
test_truncation (test.test_gdb.test_pretty_print.PrettyPrintTests.test_truncation)
Verify that very long output is truncated ... ok
test_tuples (test.test_gdb.test_pretty_print.PrettyPrintTests.test_tuples)
Verify the pretty-printing of tuples ... ok

----------------------------------------------------------------------
Ran 27 tests in 4.694s

OK (skipped=5)
0:00:08 load avg: 0.93 [6/6/2] test_gdb.test_pretty_print passed

== Tests result: FAILURE ==

2 tests failed:
    test_gdb.test_backtrace test_gdb.test_misc

4 tests OK.

Total duration: 8.4 sec
Total tests: run=60 failures=6 skipped=22
Total test files: run=6/6 failed=2
Result: FAILURE
CPython versions tested on:

CPython main branch, 3.16, 3.15, 3.14

Operating systems tested on:

Linux

Linked PRs
  • gh-153801

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Reproduce the issue with the documented --with-tail-call-interp and -O0 build commands, then run ./python -m test -wW test_gdb. Start with Lib/test/test_gdb/test_backtrace.py, Lib/test/test_gdb/util.py, and Lib/test/test_gdb/gdb_sample.py to trace the missing frames; done means the backtrace and backtrace-full tests pass for the tail-call interpreter at -O0.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
compilers, devtools, testing-qa
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
45/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.