Ceci est en quelque sorte lié à gdb set overwrite la connexion doit remplacer gdb.txt correctement? .

Disons que je suis en train dexécuter une session dune application. À titre dexemple, permettez-moi de reprendre lexemple de qbittorrent.

Comme indiqué précédemment, voici comment une exécution se déroule –

$ gdb qbittorrent (gdb) set logging overwrite on (gdb) set logging on (gdb) set pagination 0 (gdb) run 

une façon que je sais est de quitter lapplication gracieusement, mais parfois lapplication se bloque / prend trop de temps ou ne répond tout simplement pas.

Alors la seule option qui me reste est dutiliser CTRL+C qui, si je comprends bien, tue lapplication sous-jacente , dans notre exemple qbittorrent et puis je suis capable de quitter gdb au moyen de

(gdb) quit 

Y a-t-il / y aurait-il un autre moyen de quitter lapplication tout en laissant le La session gdb continue de fonctionner ou la seule façon est la manière brute que jai mentionnée ci-dessus.

LAFAI sait que tuer un processus dapplication devrait être la dernière solution et non la première.

Commentaires

  • Lors de lexécution sous gdb avec les paramètres par défaut, Ctrl-C ne tue pas lapplication, se casse simplement dans le débogueur, où vous pouvez décider que faire. Utilisez cont pour " avalez " le signal, et lapplication continue sans être dérangée. Ou utilisez signal 2 pour transmettre le SIGINT (2) à lapplication. Ou utilisez kill pour tuer lapplication.

Réponse

Vous pouvez utiliser des signaux pour cela. Avant de démarrer votre programme, configurez USR1 ou USR2 pour interrompre gdb sans affecter le programme:

handle SIGUSR1 nopass 

Ensuite, vous pouvez exécuter votre programme, et lorsque vous avez besoin de l’arrêter, exécutez kill -USR1 depuis un autre shell avec le pid (enfant) approprié. gdb mettra lapplication en pause, et vous pourrez ensuite ajouter des points darrêt, examiner létat, etc., et si vous le souhaitez, continuer lexécution avec cont.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *