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.
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.
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
.
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
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.