]> granicus.if.org Git - python/commitdiff
python-gdb.py: catch gdb.error on gdb.selected_frame()
authorVictor Stinner <victor.stinner@gmail.com>
Fri, 16 Dec 2016 09:00:39 +0000 (10:00 +0100)
committerVictor Stinner <victor.stinner@gmail.com>
Fri, 16 Dec 2016 09:00:39 +0000 (10:00 +0100)
Tools/gdb/libpython.py

index 75f1ccbd442d8d90616ed2e63148baaa5df8b604..ed515c00173571dd2a41d75859bd7360b5d4d442 100755 (executable)
@@ -1527,7 +1527,11 @@ class Frame(object):
     def get_selected_python_frame(cls):
         '''Try to obtain the Frame for the python-related code in the selected
         frame, or None'''
-        frame = cls.get_selected_frame()
+        try:
+            frame = cls.get_selected_frame()
+        except gdb.error:
+            # No frame: Python didn't start yet
+            return None
 
         while frame:
             if frame.is_python_frame():
@@ -1668,6 +1672,10 @@ PyList()
 def move_in_stack(move_up):
     '''Move up or down the stack (for the py-up/py-down command)'''
     frame = Frame.get_selected_python_frame()
+    if not frame:
+        print('Unable to locate python frame')
+        return
+
     while frame:
         if move_up:
             iter_frame = frame.older()
@@ -1730,6 +1738,10 @@ class PyBacktraceFull(gdb.Command):
 
     def invoke(self, args, from_tty):
         frame = Frame.get_selected_python_frame()
+        if not frame:
+            print('Unable to locate python frame')
+            return
+
         while frame:
             if frame.is_python_frame():
                 frame.print_summary()
@@ -1747,8 +1759,12 @@ class PyBacktrace(gdb.Command):
 
 
     def invoke(self, args, from_tty):
-        sys.stdout.write('Traceback (most recent call first):\n')
         frame = Frame.get_selected_python_frame()
+        if not frame:
+            print('Unable to locate python frame')
+            return
+
+        sys.stdout.write('Traceback (most recent call first):\n')
         while frame:
             if frame.is_python_frame():
                 frame.print_traceback()