diff --git a/Lib/test/test_gdb.py b/Lib/test/test_gdb.py index 5f554897f86a..b3aa855a5bd5 100644 --- a/Lib/test/test_gdb.py +++ b/Lib/test/test_gdb.py @@ -955,6 +955,31 @@ def __init__(self): self.assertRegex(gdb_output, r" + File "", line 7, in foo + File "", line 11, in +''') + class PyPrintTests(DebuggerTests): @unittest.skipIf(python_is_optimized(), diff --git a/Misc/NEWS.d/next/Tools-Demos/2021-11-18-11-20-21.bpo-45838.TH6mwc.rst b/Misc/NEWS.d/next/Tools-Demos/2021-11-18-11-20-21.bpo-45838.TH6mwc.rst new file mode 100644 index 000000000000..b6dafc5c3edc --- /dev/null +++ b/Misc/NEWS.d/next/Tools-Demos/2021-11-18-11-20-21.bpo-45838.TH6mwc.rst @@ -0,0 +1 @@ +Fix line number calculation when debugging Python with GDB. diff --git a/Tools/gdb/libpython.py b/Tools/gdb/libpython.py index aeaa63e540d8..45be5ab9bb9b 100755 --- a/Tools/gdb/libpython.py +++ b/Tools/gdb/libpython.py @@ -659,7 +659,10 @@ def addr2line(self, addrq): addr += ord(addr_incr) if addr > addrq: return lineno - lineno += ord(line_incr) + line_delta = ord(line_incr) + if line_delta >= 128: + line_delta -= 256 + lineno += line_delta return lineno