web-dev-qa-db-fra.com

Comment puis-je arrêter l'exécution dans GDB sans point d'arrêt?

Comment arrêter une exécution GDB sans point d'arrêt?

30
anand

Utilisez simplement une interruption régulière Ctrl-c fonctionnera très bien. GDB transmet simplement le SIGINT au processus de débogage qui meurt ensuite. GDB interceptera la sortie non standard et interrompra le processus, vous pouvez donc toujours examiner tous les threads, leurs piles et les valeurs actuelles des variables. Cela fonctionne bien, mais vous feriez mieux d'utiliser des points d'arrêt. La seule fois où je me retrouve à faire cela, si je pense que je suis entré dans une sorte de boucle infinie.

22
luke

Les applications GUI ne réagissent pas à ^ C et ^ Brisent la façon dont les applications console font. Étant donné que de nos jours, la plupart des projets non triviaux ont tendance à être des applications GUI ou des bibliothèques principalement utilisées dans des applications GUI, vous avez deux options:

  1. Envoyez SIGSTOP à l'application à partir d'un terminal séparé. C'est lourd.

  2. Si vous appuyez sur ^ C ou ^ Break sur l'invite GDB, GDB se terminera mais l'application continuera de fonctionner. Vous pouvez ensuite réexécuter GDB pour vous y connecter à l'aide du commutateur de ligne de commande -p. Cela perd l'état du débogueur.

Dans les deux cas, cela peut vous être utile: tasklist | grepProcessName| sed -e 's/ProcessName*\([0-9]*\).*/gdbModuleName-pid=\1/' > rungdb.sh Vous pouvez le modifier pour l'utiliser dans des scripts Shell, des makefiles ou pour envoyer un signal au lieu de joindre GDB.

info threads Vous aidera à déterminer le fil que vous souhaitez consulter. Utilisez ensuite threadThreadNumber pour y passer.

12
Anonymous Coward

Démarrez un shell, recherchez l'ID de processus à l'aide de ps et envoyez-le SIGSTOP ou SIGINT à l'aide de la commande kill (par exemple kill -INT pid).

7
zvrba

Tapez simplement BREAK sans aucun argument.

Break, lorsqu'il est appelé sans argument, break définit un point d'arrêt à la prochaine instruction à exécuter dans le cadre de pile sélectionné

6
Chris Allwein

Ctrl + Z semble fonctionner pour moi (mais seulement dans certains cas - je ne sais pas pourquoi).

2
kralyk