linux - picard - puddletag
¿Cómo terminar gdbserver? (7)
Aquí hay un script que estoy usando para iniciar el gdb server
través de ssh y eliminarlo cuando sea necesario con ctrl + c
#!/usr/bin/env bash
trap stop_gdb_server INT
function stop_gdb_server {
ssh remote-srv-name "pkill gdbserver"
echo "GDB server killed"
}
ssh remote-srv-name "cd /path/to/project/dir/ && gdbserver localhost:6789 my-executable"
Estoy tratando de depurar con gdbserver. después de terminar el cliente gdb en el host, veo que gdbserver sigue escuchando:
Remote side has terminated connection. GDBserver will reopen the connection.
Listening on port 5004
Intenté salir de gdbserver con todo lo que encontré en cualquier lugar sin suerte: salir, salir, q, salir del monitor, Esc, Cnt + c ... nada lo mata. Además, cuando abrí otro terminal y busqué el proceso ejecutando gdbserver (con los comandos ps, arriba) No pude encontrarlo allí ... mi pregunta es: ¿Cómo terminar gdbserver?
Dar comando
monitor exit
desde su host gdb antes de terminar el cliente. Si ya lo has terminado, simplemente adjúntalo con otro.
en linux escribe:
ps -ef |grep gdbserver
Ahora encuentra el pid del proceso gdbserver y luego
kill -9 <pid>
gdbserver debería salir cuando su destino salga. La pregunta es cómo está saliendo tu objetivo: lo hace
- no hacer nada: solo caerse
- devuelve 0 en main
- salida (0) en principal
Desde las sesiones de depuración que he estado ejecutando, en el primer caso, gdbserver no se cerrará. Simplemente se quedará para siempre y tienes que matarlo. En los dos últimos casos, gdbserver se cerrará.
quit [expresión]
q Para salir de GDB, use el comando quit (abreviado q), o escriba un carácter de fin de archivo (normalmente Cd). Si no proporciona la expresión, GDB terminará normalmente; de lo contrario, terminará utilizando el resultado de la expresión como el código de error.
gdbserver
ejecuta en el destino, no en el host.
Terminarlo depende del objetivo. Por ejemplo, si su destino es UNIX-ish, podría iniciar sesión de forma remota y usar ps y kill desde un shell de destino.
Para cualquier tipo de destino, reiniciar debería matar gdbserver
.
(Si esto no es suficiente para responder a su pregunta, incluya más información sobre el objetivo en la pregunta).
monitor exit
paso a paso
https://.com/a/23647002/895245 menciona, pero esta es la configuración completa que necesita.
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
(gdb) r
[Inferior 1 (process 1234) exited normally]
(gdb) monitor exit
Probado en Ubuntu 14.04.