From: Ɓukasz Langa Date: Mon, 14 Aug 2017 23:06:28 +0000 (-0700) Subject: [3.6] bpo-30983: eval frame rename in pep 0523 broke gdb's python extension (GH-2803... X-Git-Tag: v3.6.3rc1~157 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=09b77165e3fffa7b7ff160ad06042cdcfa004bf5;p=python [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) --- 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 0000000000..44c5e1c696 --- /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 31ae8117c7..40e0a677cd 100755 --- a/Tools/gdb/libpython.py +++ b/Tools/gdb/libpython.py @@ -1502,8 +1502,10 @@ class Frame(object): 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