J'essaie de déboguer avec gdbserver. une fois que j'ai arrêté le client gdb sur l'hôte, je vois que le serveur gdbserver écoute toujours:
Remote side has terminated connection. GDBserver will reopen the connection.
Listening on port 5004
J'ai essayé de quitter gdbserver avec tout ce que j'ai trouvé n'importe où sans succès: quitter, quitter, q, quitter le moniteur, Esc, Cnt + c ... rien ne le tue. De plus, quand j’ai ouvert un autre terminal et recherché le processus d’exécution de gdbserver (avec les commandes ps, top), je n’ai pas pu le trouver ici ... Ma question est la suivante: comment mettre fin à gdbserver?
Donner commande
monitor exit
de votre hôte gdb avant de mettre fin au client. Si vous l'avez déjà résilié, attachez-le simplement à un autre.
sur Linux écrivez:
ps -ef |grep gdbserver
Maintenant, trouvez le pid du processus gdbserver puis
kill -9 <pid>
monitor exit
pas à pas
https://stackoverflow.com/a/23647002/895245 le mentionne, mais il s'agit de la configuration complète dont vous avez besoin.
Éloigné:
# 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
Testé sous Ubuntu 14.04.
gdbserver
s'exécute sur la cible, pas sur l'hôte.
La terminaison dépend de la cible. Par exemple, si votre cible est UNIX-ish, vous pouvez vous connecter à distance et utiliser ps et kill à partir d'un shell cible.
Pour tout type de cible, le redémarrage devrait tuer gdbserver
.
(Si cela ne suffit pas pour répondre à votre question, incluez plus d'informations sur la cible dans la question.)
quitter [expression]
q Pour quitter GDB, utilisez la commande quit (abrégé q) ou tapez un caractère de fin de fichier (généralement C-d). Si vous ne fournissez pas d'expression, GDB se terminera normalement. sinon, il se terminera en utilisant le résultat de l'expression comme code d'erreur.
gdbserver devrait quitter lorsque votre cible se ferme. La question est de savoir comment votre cible se termine:
À partir des sessions de débogage que j'ai exécutées, dans le premier cas, gdbserver ne se fermera pas. Il restera juste pour toujours et vous devrez le tuer. Dans les deux derniers cas, gdbserver se fermera.
Voici un script que j'utilise pour démarrer gdb server
via ssh et le tuer si nécessaire avec 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"