]> granicus.if.org Git - python/commitdiff
[3.6] bpo-30983: eval frame rename in pep 0523 broke gdb's python extension (GH-2803...
authorŁukasz Langa <lukasz@langa.pl>
Mon, 14 Aug 2017 23:06:28 +0000 (16:06 -0700)
committerGitHub <noreply@github.com>
Mon, 14 Aug 2017 23:06:28 +0000 (16:06 -0700)
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)

Misc/NEWS.d/next/Tools-Demos/2017-08-14-15-37-38.bpo-30983.A7UzX8.rst [new file with mode: 0644]
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 (file)
index 0000000..44c5e1c
--- /dev/null
@@ -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.
index 31ae8117c785ff466db1a7f1624ccccc404c6853..40e0a677cd0545487130ccbebd24ed486111d362 100755 (executable)
@@ -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