python / python/cpython

Tail call interpreter makes test_gdb fail on -O0 optimization level

Ouverte
#150,206 4 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

interpreter-core type-bug
Langage dominant
Python
Étoiles
77.2k
Forks
35.9k
Métriques de merge des PR
Métriques de PR en attente

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

Guide de contribution

Ouvrir le guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Piste de recherche

Reproduisez le problème avec les commandes de compilation documentées --with-tail-call-interp et -O0, puis exécutez ./python -m test -wW test_gdb. Commencez par Lib/test/test_gdb/test_backtrace.py, Lib/test/test_gdb/util.py et Lib/test/test_gdb/gdb_sample.py pour suivre la trace des frames manquantes ; la tâche est terminée lorsque les tests backtrace et backtrace-full réussissent pour le tail-call interpreter avec -O0.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
python
Domaine
compilers, devtools, testing-qa
Type d'issue
Bug
Difficulté
4/5
Temps estimé
3-5 jours
Activité
Calme
Clarté
Plutôt claire
Accessibilité débutants
45/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.