Comment charger le programme qui lit stdin et prend des paramètres dans gdb?
-
19-08-2019 - |
Question
J'ai un programme qui prend les entrées de stdin et prend également certains paramètres depuis 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’essaie de chargez le programme avec la commande:
gdb cat input.txt > myprogram -path "/home/user/work"
Cependant, gdb ne l'aime pas.
Question extraite de ici .
Malheureusement, je ne comprends pas la solution et je ne sais pas quoi faire au-delà de la compilation avec l'option -g
et de l'exécution de la commande M-x gdb.
La solution
Si vous le faisiez à partir d'un shell, vous le feriez comme ceci:
% gdb myprogram
gdb> run params ... < input.txt
Cela semble également fonctionner dans emacs.
Autres conseils
Il y a plusieurs façons de le faire:
$ 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 exécuter
( r
) utilise par défaut les arguments tels que définis précédemment avec set args
.
Par souci d’intégralité au 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
Et si vous n'avez pas besoin de déboguer dès le début, vous pouvez également vous connecter à un processus en cours d'exécution en utilisant:
$ gdb myprogram xxx
où xxx est l'identifiant du processus. Ensuite, vous n'avez pas besoin de dire à gdb les arguments de départ.