web-dev-qa-db-fra.com

Comment mettre fin à gdbserver?

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?

17
yehudahs

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.

15

sur Linux écrivez:

ps -ef |grep gdbserver

Maintenant, trouvez le pid du processus gdbserver puis

kill -9 <pid>
3
Innovation

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.)

1
Paul Beusterien

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.

0
wsha

gdbserver devrait quitter lorsque votre cible se ferme. La question est de savoir comment votre cible se termine:

  1. ne rien faire: juste tomber à travers
  2. retourne 0 en main
  3. sortie (0) en main

À 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.

0
cup

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"
0
Ivan Talalaev