27 votes

gdb - débogage avec pipe

Si j'ai deux programmes nommés blah et ret .. je veux déboguer le programme blah qui reçoit des entrées du programme ret via des tuyaux .. comment puis-je déboguer le programme blah dans le cas suivant en utilisant gdb

bash> ret | blabla

34voto

Pavel Shved Points 34706

À première, vous pouvez exécuter le programme et le corriger par pid. Cette solution, bien sûr, ne couvre pas tous les cas.

Une autre approche est d'utiliser Linux capacités pour la communication inter-processus. En bref, vous rediriger la sortie d' ret d'une FIFO fichier spécial ("tube nommé") puis de les lire à partir de ce FIFO via le débogueur. Voici comment c'est fait. De bash, exécutez:

mkfifo foo

Cela crée un fichier spécial dans votre répertoire qui servira de canal nommé. Lorsque vous écrivez un texte de ce fichier (en utilisant la même syntaxe echo "Hello" >foo), l'écriture du programme se bloque jusqu'à ce que quelqu'un lit les données à partir du fichier (cat <foo, par exemple). Dans notre cas, un gdb contrôlés processus de lecture à partir de ce fichier.

Après avoir créé une fifo, exécuter à partir du bash:

ret > foo &   # ampersand because it may block as nobody is reading from foo
gdb blah

Puis, dans gdb invite de commandes, exécutez

run <foo

Et obtenir l'effet désiré. Notez que vous ne pouvez pas lire les données à partir de la fifo (ainsi qu'à partir d'un tuyau d'habitude) deux fois: quand vous avez lu l'ensemble des données, blah processus meurt et vous devez répéter la commande d'écriture à toto (vous pouvez le faire à partir de l'autre fenêtre shell).

Lorsque vous avez terminé, retirez le fifo avec rm foo (ou de le placer dans le répertoire où il sera automatiquement supprimé au redémarrage du système, telles que l' /tmp).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X