Make stepping breakpoints internal in newer versions of gdb
authorMark Florisson <markflorisson88@gmail.com>
Mon, 22 Nov 2010 13:30:35 +0000 (14:30 +0100)
committerMark Florisson <markflorisson88@gmail.com>
Mon, 22 Nov 2010 13:30:35 +0000 (14:30 +0100)
Cython/Debugger/libpython.py

index 3c7c76ca1c2bc9c86fdf536f319a311cdb18efc9..5e5fb9a4091b0a058159ba4b2c59021db7e762b6 100644 (file)
@@ -1672,11 +1672,26 @@ class GenericCodeStepper(gdb.Command):
         
         for funcname in break_funcs:
             if funcname not in self.static_breakpoints:
-                self.static_breakpoints[funcname] = self._break_func(funcname)
+                try:
+                    gdb.Breakpoint('', gdb.BP_BREAKPOINT, internal=True)
+                except TypeError:
+                    # gdb.Breakpoint does not take an 'internal' argument
+                    breakpoint = self._break_func(funcname)
+                except RuntimeError:
+                    # gdb.Breakpoint does take an 'internal' argument, use it
+                    # and hide output
+                    result = gdb.execute(
+                        "python bp = gdb.Breakpoint(%r, gdb.BP_BREAKPOINT, internal=True); "
+                               "print bp.number", 
+                        to_string=True)
+                    
+                    breakpoint = int(result)
+
+                self.static_breakpoints[funcname] = breakpoint
         
         for bp in set(self.static_breakpoints) - break_funcs:
             gdb.execute("delete " + self.static_breakpoints[bp])
-
+        
         self.disable_breakpoints()
 
     def enable_breakpoints(self):