bpo-45637: Remove broken fallback in gdb helpers to obtain frame variable (GH-29257)

This commit is contained in:
Pablo Galindo Salgado 2021-11-09 11:19:47 +00:00 committed by GitHub
parent 6a1cc8bf8a
commit f4c03484da
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 9 additions and 11 deletions

View file

@ -823,6 +823,8 @@ Traceback \(most recent call first\):
foo\(1, 2, 3\) foo\(1, 2, 3\)
''') ''')
@unittest.skipIf(python_is_optimized(),
"Python was compiled with optimizations")
def test_threads(self): def test_threads(self):
'Verify that "py-bt" indicates threads that are waiting for the GIL' 'Verify that "py-bt" indicates threads that are waiting for the GIL'
cmd = ''' cmd = '''

View file

@ -1801,17 +1801,13 @@ class Frame(object):
frame = PyFramePtr(frame) frame = PyFramePtr(frame)
if not frame.is_optimized_out(): if not frame.is_optimized_out():
return frame return frame
# gdb is unable to get the "frame" argument of PyEval_EvalFrameEx() cframe = self._gdbframe.read_var('cframe')
# because it was "optimized out". Try to get "frame" from the frame if cframe is None:
# of the caller, _PyEval_Vector(). return None
orig_frame = frame frame = PyFramePtr(cframe["current_frame"].dereference())
caller = self._gdbframe.older() if frame and not frame.is_optimized_out():
if caller: return frame
frame = caller.read_var('frame') return None
frame = PyFramePtr(frame)
if not frame.is_optimized_out():
return frame
return orig_frame
except ValueError: except ValueError:
return None return None