Agregar listas de comandos de punto de interrupción en GDB controlado desde el script de Python

Estoy usando Python para controlar GDB a través de comandos por lotes. Así es como estoy llamando a GDB:

$ gdb --batch --command=cmd.gdb myprogram 

El listado de cmd.gdb solo contiene la línea que llama al script de Python

 source cmd.py 

Y el script cmd.py intenta crear un punto de interrupción y una lista de comandos adjunta

 bp = gdb.Breakpoint("myFunc()") # break at function in myprogram gdb.execute("commands " + str(bp.number)) # then what? I'd like to at least execute a "continue" on reaching breakpoint... gdb.execute("run") 

El problema es que no sé cómo adjuntar ningún comando GDB al punto de interrupción desde el script de Python. ¿Hay alguna forma de hacerlo o me falta alguna facilidad mucho más sencilla y obvia para ejecutar automáticamente comandos específicos de punto de interrupción?

Se puede usar def stop desde GDB 7.7.1:

 gdb.execute('file a.out', to_string=True) class MyBreakpoint(gdb.Breakpoint): def stop (self): gdb.write('MyBreakpoint\n') # Continue automatically. return False # Actually stop. return True MyBreakpoint('main') gdb.execute('run') 

Documentado en: https://sourceware.org/gdb/onlinedocs/gdb/Breakpoints-In-Python.html#Breakpoints-In-Python

Ver también: ¿Cómo escribir gdb (con python)? Ejemplo de agregar puntos de interrupción, ejecutar, ¿qué punto de interrupción golpeamos?

Creo que esta es probablemente una mejor manera de hacerlo en lugar de usar la función de “lista de comandos” de GDB.

 bp1 = gdb.Breakpoint("myFunc()") # Define handler routines def stopHandler(stopEvent): for b in stopEvent.breakpoints: if b == bp1: print "myFunc() breakpoint" else: print "Unknown breakpoint" gdb.execute("continue") # Register event handlers gdb.events.stop.connect (stopHandler) gdb.execute("run") 

Probablemente también podría crear una subclase de gdb.Breakpoint para agregar una rutina de “manejo” en lugar de hacer la verificación de igualdad dentro del bucle.