Cuando está haciendo una sesión gdb habitual en un archivo ejecutable en la misma computadora, puede dar el comando de ejecución e iniciará el programa nuevamente.
Cuando ejecuta gdb en un sistema integrado, como con el comando target localhost: 3210 ', ¿cómo inicia el programa nuevamente sin salir y reiniciar su sesión de gdb?
Está buscando Modo multiproceso para gdbserver y set remote exec-file filename
Desafortunadamente, no conozco una forma de reiniciar la aplicación y aún así mantener su sesión. Una solución alternativa es volver a configurar la PC en el punto de entrada de su programa. Puede hacerlo llamando a:
jump function
o
set $pc=address
.
Si modificó los argumentos a main
, es posible que necesite configurarlos nuevamente.
Editar:
Hay un par de advertencias con el método anterior que podrían causar problemas.
Entonces, usar jump no es lo mismo que reiniciar el programa.
Presumiblemente está ejecutando gdbserver en el sistema integrado.
Puede pedirle que reinicie su programa en lugar de salir con target extended-remote
"jump _start" es la forma habitual.
Para mí, el método descrito en 21.2 Ejemplo de inicio de sesión GDB funciona muy bien. Cuando entro monitor reset halt
más tarde en el mensaje "(gdb)" se restablece el hardware de destino y puedo reiniciar la aplicación con c
(= continuar).
El comando load
se puede omitir entre las ejecuciones porque no hay necesidad de actualizar el programa una y otra vez.
Procedimiento paso a paso
Remoto:
# pwd contains cross-compiled ./myexec
gdbserver --multi :1234
Local:
# pwd also contains the same cross-compiled ./myexec
gdb -ex 'target extended-remote 192.168.0.1:1234' \
-ex 'set remote exec-file ./myexec' \
--args ./myexec arg1 arg2
(gdb) r
[Inferior 1 (process 1234) exited normally]
(gdb) r
[Inferior 1 (process 1235) exited normally]
(gdb) monitor exit
Probado en Ubuntu 14.04.
También es posible pasar argumentos CLI al programa como:
gdbserver --multi :1234 ./myexec arg1 arg2
y el ./myexec
parte elimina la necesidad de set remote exec-file ./myexec
, pero esto tiene las siguientes molestias:
show args
y no persiste durante los reinicios: https://sourceware.org/bugzilla/show_bug.cgi?id=2198Pase las variables de entorno y cambie el directorio de trabajo sin reiniciar: ¿Cómo modificar las variables de entorno y el directorio de trabajo de gdbserver --multi sin reiniciarlo?
Si está ejecutando gdb normal, puede escribir 'run' shortcut 'r' y gdb le pregunta si desea reiniciar el programa
En EFM32 Happy Gecko, ninguna de las sugerencias funcionaría para mí, así que esto es lo que aprendí de la documentación sobre la integración de GDB en el entorno Eclipse.
(gdb) mon reset 0
(gdb) continue
(gdb) continue
Esto me pone en el estado que esperaba al presionar restablecer desde el IDE.