[3.6] bpo-30983: eval frame rename in pep 0523 broke gdb's python extension (GH-2803) (#3090)
![](https://secure.gravatar.com/avatar/cc7737cd64a84f1b5c61a160798e97ee.jpg?s=120&d=mm&r=g)
https://github.com/python/cpython/commit/09b77165e3fffa7b7ff160ad06042cdcfa0... commit: 09b77165e3fffa7b7ff160ad06042cdcfa004bf5 branch: 3.6 author: Łukasz Langa <lukasz@langa.pl> committer: GitHub <noreply@github.com> date: 2017-08-14T16:06:28-07:00 summary: [3.6] bpo-30983: eval frame rename in pep 0523 broke gdb's python extension (GH-2803) (#3090) pep 0523 renames PyEval_EvalFrameEx to _PyEval_EvalFrameDefault while the gdb python extension only looks for PyEval_EvalFrameEx to understand if it is dealing with a frame. Final effect is that attaching gdb to a python3.6 process doesnt resolve python objects. Eg. py-list and py-bt dont work properly. This patch fixes that. Tested locally on python3.6 (cherry picked from commit 2e0f4db114) files: A Misc/NEWS.d/next/Tools-Demos/2017-08-14-15-37-38.bpo-30983.A7UzX8.rst M Tools/gdb/libpython.py diff --git a/Misc/NEWS.d/next/Tools-Demos/2017-08-14-15-37-38.bpo-30983.A7UzX8.rst b/Misc/NEWS.d/next/Tools-Demos/2017-08-14-15-37-38.bpo-30983.A7UzX8.rst new file mode 100644 index 00000000000..44c5e1c6967 --- /dev/null +++ b/Misc/NEWS.d/next/Tools-Demos/2017-08-14-15-37-38.bpo-30983.A7UzX8.rst @@ -0,0 +1,4 @@ +With PEP 523, gdb's Python integration stopped working properly for frames +using the ``_PyEval_EvalFrameDefault`` function. Affected functionality +included `py-list` and `py-bt`. This is now fixed. Patch by Bruno "Polaco" +Penteado. diff --git a/Tools/gdb/libpython.py b/Tools/gdb/libpython.py index 31ae8117c78..40e0a677cd0 100755 --- a/Tools/gdb/libpython.py +++ b/Tools/gdb/libpython.py @@ -1502,8 +1502,10 @@ def is_python_frame(self): return False def is_evalframeex(self): - '''Is this a PyEval_EvalFrameEx frame?''' - if self._gdbframe.name() == 'PyEval_EvalFrameEx': + '''Is this a PyEval_EvalFrameEx or _PyEval_EvalFrameDefault (PEP 0523) + frame?''' + if self._gdbframe.name() in ('PyEval_EvalFrameEx', + '_PyEval_EvalFrameDefault'): ''' I believe we also need to filter on the inline struct frame_id.inline_depth, only regarding frames with
participants (1)
-
Łukasz Langa