Skip to content

Commit f4c0348

Browse files
authored
bpo-45637: Remove broken fallback in gdb helpers to obtain frame variable (GH-29257)
1 parent 6a1cc8b commit f4c0348

File tree

2 files changed

+9
-11
lines changed

2 files changed

+9
-11
lines changed

Lib/test/test_gdb.py

+2
Original file line numberDiff line numberDiff line change
@@ -823,6 +823,8 @@ def test_bt_full(self):
823823
foo\(1, 2, 3\)
824824
''')
825825

826+
@unittest.skipIf(python_is_optimized(),
827+
"Python was compiled with optimizations")
826828
def test_threads(self):
827829
'Verify that "py-bt" indicates threads that are waiting for the GIL'
828830
cmd = '''

Tools/gdb/libpython.py

+7-11
Original file line numberDiff line numberDiff line change
@@ -1801,17 +1801,13 @@ def get_pyop(self):
18011801
frame = PyFramePtr(frame)
18021802
if not frame.is_optimized_out():
18031803
return frame
1804-
# gdb is unable to get the "frame" argument of PyEval_EvalFrameEx()
1805-
# because it was "optimized out". Try to get "frame" from the frame
1806-
# of the caller, _PyEval_Vector().
1807-
orig_frame = frame
1808-
caller = self._gdbframe.older()
1809-
if caller:
1810-
frame = caller.read_var('frame')
1811-
frame = PyFramePtr(frame)
1812-
if not frame.is_optimized_out():
1813-
return frame
1814-
return orig_frame
1804+
cframe = self._gdbframe.read_var('cframe')
1805+
if cframe is None:
1806+
return None
1807+
frame = PyFramePtr(cframe["current_frame"].dereference())
1808+
if frame and not frame.is_optimized_out():
1809+
return frame
1810+
return None
18151811
except ValueError:
18161812
return None
18171813

0 commit comments

Comments
 (0)