Come caricare il programma leggendo stdin e prendendo parametri in gdb?
-
19-08-2019 - |
Domanda
Ho un programma che accetta input da stdin e accetta anche alcuni parametri dalla riga di comando. Sembra così:
cat input.txt > myprogram -path "/home/user/work"
Provo a eseguire il debug del codice con gdb dentro emacs, di M-x gdb, ci provo carica il programma con il comando:
gdb cat input.txt > myprogram -path "/home/user/work"
Tuttavia, a gdb non piace.
Domanda scritta da qui .
Sfortunatamente non capisco la soluzione e non sono sicuro di cosa fare oltre la compilazione con l'opzione -g
e l'esecuzione del comando M-x gdb.
Soluzione
Se lo facessi da una shell lo faresti in questo modo:
% gdb myprogram
gdb> run params ... < input.txt
Questo sembra funzionare anche all'interno di Emacs.
Altri suggerimenti
Esistono diversi modi per farlo:
$ gdb myprogram
(gdb) r -path /home/user/work < input.txt
o
$ gdb myprogram
(gdb) set args -path /home/user/work < input.txt
(gdb) r
o
$ gdb -ex 'set args -path /home/user/work < input.txt' myprogram
(gdb) r
dove il comando gdb esegui
( r
) utilizza per impostazione predefinita gli argomenti impostati in precedenza con set args
.
Per completezza all'avvio di una sessione di debug c'è anche l'opzione --args. cioè)
gdb gdbarg1 gdbarg2 --args yourprog arg1 arg2 -x arg3
E se non è necessario eseguire il debug sin dall'inizio, è anche possibile collegarsi a un processo già in esecuzione utilizzando:
$ gdb myprogram xxx
dove xxx è l'ID del processo. Quindi non è necessario dire a gdb gli argomenti di partenza.