De acuerdo, el salto de información enumera los puntos de corte, pero no en un formato que funcione bien al reutilizarlos utilizando el comando --como en esta pregunta . ¿GDB tiene un método para volcarlos en un archivo aceptable para la entrada nuevamente? A veces, en una sesión de depuración, es necesario reiniciar GDB después de crear un conjunto de puntos de interrupción para las pruebas.
El archivo .gdbinit tiene el mismo problema que --command. El comando info break no enumera los comandos, sino más bien una tabla para consumo humano.
Para elaborar, aquí hay una muestra del corte de información :
(gdb) pausa de información Núm. Tipo Disp Enb Dirección Qué 1 punto de interrupción keep y 0x08048517 <foo :: bar (void) +7>
Make breakpoint pending on future shared library load? (y or [n]) [answered N; input not from terminal]
set breakpoint pending on
como se describe en cómo responder Y en el script gdb y gdb: cómo establecer puntos de interrupción en futuras bibliotecas compartidas con un --command flagbreak g_log if log_level==G_LOG_LEVEL_CRITICAL
), al menos gdb 7.8.1 dejará de analizar más comandos. Si tiene comandos adicionales que deben ejecutarse para ese punto de interrupción, coloque lacommands
línea antes de lacondition
línea.Esta respuesta está desactualizada. GDB ahora admite guardar directamente. Mira esta respuesta .
Puede usar el registro:
El archivo breaks.txt ahora contiene:
Escribir una secuencia de comandos AWK que lo transforma en un formato útil para el archivo
.gdbinit
o--command
es fácil. O incluso puede hacer que el script emita separadamente--eval-command
a la línea de comando GDB ...Agregar esta pequeña macro a .gdbinit lo ayudará a hacerlo:
fuente
save breakpoints
comando.Coloque sus comandos y puntos de interrupción GDB en un archivo .gdbinit tal como podría escribirlos en el
gdb>
indicador, y GDB los cargará y ejecutará automáticamente al inicio. Este es un archivo por directorio, por lo que puede tener diferentes archivos para diferentes proyectos.fuente
Una extensión de la extensión de anon a la respuesta de Johannes :
Con
brestore
usted puede restaurar los puntos de interrupción guardados conbsave
.fuente
Extensión a la respuesta de Johannes : puede reformatear automáticamente la salida de
info break
un archivo de comando GDB válido:Luego tiene un archivo de comando válido
brestore.gdb
.Esto funcionó para mí cuando se compila la aplicación
-g
.También lo probé con éxito con GDB v6.8 en Ubuntu 9.10 (Karmic Koala).
fuente
Quizás esto:
save breakpoints [filename]
fuente
Ponga lo siguiente en ~ / .gdbinit para definir bsave y brestore como comandos GDB para guardar y restaurar puntos de interrupción.
fuente
También recibo este error / advertencia en GDB cuando intento habilitar el registro en modo TUI . Sin embargo, el registro parece funcionar cuando está en modo "no TUI". Así que dejo el modo TUI cuando quiero registrar algo. (Cambia de un lado a otro en modo TUI con Ctrl+X , Ctrl+A ).
Así es como trabajo:
set logging on
ahora no debería quejarse.fuente
La siguiente adición a una respuesta anterior me pareció útil para guardar / cargar los puntos de interrupción en un archivo específico.
Como en la respuesta anterior, agregue el siguiente código al archivo ~ / .gdbinit
fuente
El problema es que establecer un punto de interrupción es sensible al contexto. ¿Qué pasa si tiene dos funciones estáticas llamadas foo ?
Si ya está depurando uno de los módulos que define foo, entonces GDB asumirá que se refería a ese. Pero si simplemente descarga "break foo" en un archivo y luego lee ese archivo al inicio, no estará claro a qué función se refiere .
fuente
¿Alguna otra idea? tengo
después
EDITAR:
Sé que la pregunta es "cómo guardar una lista de puntos de interrupción", sin embargo, acabo de descubrir que con GDB simplemente podemos establecer puntos de interrupción "guardados en el archivo"
donde
breakpoints.txt
hay un archivo como este:fuente