c++ - simbolo - punto de interrupcion visual studio 2017
GDB: ejecuta hasta un punto de corte específico (4)
A partir de la versión 7.0, GDB es compatible con las secuencias de comandos de python. Escribí un script simple que desactivará temporalmente todos los puntos de interrupción habilitados excepto el que tiene un número especificado y ejecutará el comando de ejecución de GDB.
Agregue el siguiente código al archivo .gdbinit
:
python
import gdb
class RunUntilCommand(gdb.Command):
"""Run until breakpoint and temporary disable other ones"""
def __init__ (self):
super(RunUntilCommand, self).__init__ ("run-until",
gdb.COMMAND_BREAKPOINTS)
def invoke(self, bp_num, from_tty):
try:
bp_num = int(bp_num)
except (TypeError, ValueError):
print "Enter breakpoint number as argument."
return
all_breakpoints = gdb.breakpoints() or []
breakpoints = [b for b in all_breakpoints
if b.is_valid() and b.enabled and b.number != bp_num and
b.visible == gdb.BP_BREAKPOINT]
for b in breakpoints:
b.enabled = False
gdb.execute("run")
for b in breakpoints:
b.enabled = True
RunUntilCommand()
end
En GDB, depuración del código C ++: tengo 15 puntos de interrupción estratégicamente establecidos, pero no quiero que ninguno de ellos se active hasta que llegue al punto de ruptura n. ° 2. ¿Hay algún comando run-until-breakpoint- n en GDB?
En cambio, me encuentro haciendo una de dos cosas:
Elimine todos los demás puntos de interrupción para que # 2 sea todo lo que existe, ejecute, vuelva a agregar todos los puntos de interrupción; o
Ejecutar y repetidamente
continue
allá de todos los descansos hasta que vea el primer descanso en el n. ° 2.
Quiero algo así como run-until 2
que ignorará todos los demás puntos de interrupción excepto el # 2, pero no los eliminará. ¿Existe esto? ¿Alguien más tiene una mejor manera de lidiar con esto?
Con gdb
puntos de interrupción se pueden deshabilitar en lugar de eliminar. Entonces todo lo que tienes que hacer es volver a habilitarlos cuando sea necesario.
Un poco menos doloroso que borrar todos los otros puntos de interrupción sería disable
. De esta forma, no tiene que volver a ingresar todas las cosas asociadas con el punto de interrupción para recuperarlo, solo enable
nuevo por número.
Puede enable
y disable
puntos de interrupción, y estos comandos aceptarán un rango . Use estos comandos, con un rango, en puntos estratégicos durante la ejecución del programa.
Supongo que cuando mencionas el punto de ruptura n . ° 2 te refieres a la numeración gdb de los puntos de corte. Aquí hay una sesión simple de ejemplo de gdb:
(gdb) info breakpoints
Num Type Disp Enb Address What
1 breakpoint keep y 0x00001ddb in main at example.c:34
2 breakpoint keep y 0x00001e00 in main at example.c:39
3 breakpoint keep y 0x00001e15 in main at example.c:40
(gdb) disable 1-3
(gdb) enable 2
(gdb) info breakpoints
Num Type Disp Enb Address What
1 breakpoint keep n 0x00001ddb in main at example.c:34
2 breakpoint keep y 0x00001e00 in main at example.c:39
3 breakpoint keep n 0x00001e15 in main at example.c:40
(gdb)
Ahora solo el punto de ruptura # 2 está habilitado. Ejecute el programa y cuando la ejecución se interrumpe en el n. ° 2, vuelva a habilitar todos los puntos de interrupción deseados con un rango:
(gdb) enable 1-3
(gdb) info breakpoints
Num Type Disp Enb Address What
1 breakpoint keep y 0x00001ddb in main at example.c:34
2 breakpoint keep y 0x00001e00 in main at example.c:39
3 breakpoint keep y 0x00001e15 in main at example.c:40
También puede mezclar los números de punto de corte y los rangos:
(gdb) disable 1 4 6-7
(gdb) info breakpoints
Num Type Disp Enb Address What
1 breakpoint keep n 0x00001ddb in main at example.c:34
2 breakpoint keep y 0x00001e00 in main at example.c:39
3 breakpoint keep y 0x00001e15 in main at example.c:40
4 breakpoint keep n 0x00001e4f in main at example.c:43
5 breakpoint keep y 0x00001e4f in main at example.c:44
6 breakpoint keep n 0x00001e5e in main at example.c:45
7 breakpoint keep n 0x00001e5e in main at example.c:46