[Python-checkins] bpo-45637: Remove broken fallback in gdb helpers to obtain frame variable (GH-29257)
pablogsal
webhook-mailer at python.org
Tue Nov 9 06:20:04 EST 2021
https://github.com/python/cpython/commit/f4c03484da59049eb62a9bf7777b963e2267d187
commit: f4c03484da59049eb62a9bf7777b963e2267d187
branch: main
author: Pablo Galindo Salgado <Pablogsal at gmail.com>
committer: pablogsal <Pablogsal at gmail.com>
date: 2021-11-09T11:19:47Z
summary:
bpo-45637: Remove broken fallback in gdb helpers to obtain frame variable (GH-29257)
files:
M Lib/test/test_gdb.py
M Tools/gdb/libpython.py
diff --git a/Lib/test/test_gdb.py b/Lib/test/test_gdb.py
index 2805eaf9f9567..eaeb6fb8ff568 100644
--- a/Lib/test/test_gdb.py
+++ b/Lib/test/test_gdb.py
@@ -823,6 +823,8 @@ def test_bt_full(self):
foo\(1, 2, 3\)
''')
+ @unittest.skipIf(python_is_optimized(),
+ "Python was compiled with optimizations")
def test_threads(self):
'Verify that "py-bt" indicates threads that are waiting for the GIL'
cmd = '''
diff --git a/Tools/gdb/libpython.py b/Tools/gdb/libpython.py
index 54f72320cdd8b..f4b27f115216b 100755
--- a/Tools/gdb/libpython.py
+++ b/Tools/gdb/libpython.py
@@ -1801,17 +1801,13 @@ def get_pyop(self):
frame = PyFramePtr(frame)
if not frame.is_optimized_out():
return frame
- # gdb is unable to get the "frame" argument of PyEval_EvalFrameEx()
- # because it was "optimized out". Try to get "frame" from the frame
- # of the caller, _PyEval_Vector().
- orig_frame = frame
- caller = self._gdbframe.older()
- if caller:
- frame = caller.read_var('frame')
- frame = PyFramePtr(frame)
- if not frame.is_optimized_out():
- return frame
- return orig_frame
+ cframe = self._gdbframe.read_var('cframe')
+ if cframe is None:
+ return None
+ frame = PyFramePtr(cframe["current_frame"].dereference())
+ if frame and not frame.is_optimized_out():
+ return frame
+ return None
except ValueError:
return None
More information about the Python-checkins
mailing list