web-dev-qa-db-fra.com

Comment charger un programme en lisant stdin et en prenant des paramètres dans gdb?

J'ai un programme qui prend l'entrée de stdin et prend également certains paramètres de la ligne de commande. Cela ressemble à ceci:

cat input.txt > myprogram -path "/home/user/work"

J'essaie de déboguer le code avec gdb dans emacs, par M-x gdb, j'essaye de charger le programme avec la commande:

gdb cat input.txt > myprogram -path "/home/user/work"

Cependant, gdb ne l'aime pas.

Question provenant de ici . Malheureusement, je ne comprends pas la solution et je ne sais pas quoi faire au-delà de la compilation avec le -g et exécutez la commande M-x gdb.

93
vinc456

Si vous le faisiez à partir d'un Shell, vous le feriez comme ceci:

% gdb myprogram
gdb> run params ... < input.txt

Cela semble également fonctionner avec emacs.

119
Alnitak

Il existe plusieurs façons de procéder:

$ gdb myprogram
(gdb) r -path /home/user/work < input.txt

ou

$ gdb myprogram
(gdb) set args -path /home/user/work < input.txt
(gdb) r

ou

$ gdb -ex 'set args -path /home/user/work < input.txt' myprogram
(gdb) r

où la commande gdb run (r) utilise par défaut les arguments définis précédemment avec set args.

27
maxschlepzig

Par souci d'exhaustivité lors du démarrage d'une session de débogage, il existe également l'option --args. c'est à dire)

gdb gdbarg1 gdbarg2 --args yourprog arg1 arg2 -x arg3
7
vinc456

Et si vous n'avez pas besoin de déboguer dès le début, vous pouvez également vous attacher à un processus déjà en cours en utilisant:

$ gdb myprogram xxx

où xxx est l'ID du processus. Ensuite, vous n'avez pas besoin de dire à gdb les arguments de départ.

0
Zitrax