[Python-checkins] [3.11] gh-89419: gdb: fix bug causing AttributeError in py-locals when no frame is available (GH-100611) (#100738)

kumaraditya303 webhook-mailer at python.org
Wed Jan 4 02:59:48 EST 2023


https://github.com/python/cpython/commit/d8073ee6f318773c2600f1e486ccab2504a03cdd
commit: d8073ee6f318773c2600f1e486ccab2504a03cdd
branch: 3.11
author: Eli Schwartz <eschwartz93 at gmail.com>
committer: kumaraditya303 <59607654+kumaraditya303 at users.noreply.github.com>
date: 2023-01-04T13:29:21+05:30
summary:

[3.11] gh-89419: gdb: fix bug causing AttributeError in py-locals when no frame is available (GH-100611) (#100738)

gh-89419: gdb: fix bug causing AttributeError in py-locals when no frame is available (GH-100611)

```
Unable to read information on python frame
Python Exception <class 'AttributeError'>: 'NoneType' object has no attribute 'co_name'
```

Regression in commit b4903afd4debbbd71dc49a2c8fefa74a3b6c6832. While
refactoring the code into a while loop, the previous early return when
no frame exists went missing. We have just printed a message that we
cannot get information about this, so the frame will be None, and we
cannot attempt to use it.

Discovered on python 3.11, in python 3.12a2 this should error out with
`.is_shim()` instead of `co_name`.

(cherry picked from commit 85869498331f7020e18bb243c89cd694f674b911)

files:
A Misc/NEWS.d/next/Tools-Demos/2022-12-29-19-22-11.bpo-45256.a0ee_H.rst
M Tools/gdb/libpython.py

diff --git a/Misc/NEWS.d/next/Tools-Demos/2022-12-29-19-22-11.bpo-45256.a0ee_H.rst b/Misc/NEWS.d/next/Tools-Demos/2022-12-29-19-22-11.bpo-45256.a0ee_H.rst
new file mode 100644
index 000000000000..9c1aa5762583
--- /dev/null
+++ b/Misc/NEWS.d/next/Tools-Demos/2022-12-29-19-22-11.bpo-45256.a0ee_H.rst
@@ -0,0 +1 @@
+Fix a bug that caused an :exc:`AttributeError` to be raised in ``python-gdb.py`` when ``py-locals`` is used without a frame.
diff --git a/Tools/gdb/libpython.py b/Tools/gdb/libpython.py
index 857e52f00a06..a99ce945265f 100755
--- a/Tools/gdb/libpython.py
+++ b/Tools/gdb/libpython.py
@@ -2126,6 +2126,7 @@ def invoke(self, args, from_tty):
         while True:
             if not pyop_frame:
                 print(UNABLE_READ_INFO_PYTHON_FRAME)
+                break
 
             sys.stdout.write('Locals for %s\n' % (pyop_frame.co_name.proxyval(set())))
 



More information about the Python-checkins mailing list