Como carregar o programa lendo stdin e pegando parâmetros no gdb?

Eu tenho um programa que recebe input de stdin e também leva alguns parâmetros da linha de comando. Se parece com isso:

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

Eu tento depurar o código com gdb dentro do emacs, pelo Mx gdb, eu tento carregar o programa com o comando:

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

No entanto, o gdb não gosta disso.

Pergunta cribbed daqui . Infelizmente eu não entendo a solução e não tenho certeza do que fazer além de compilar com a opção -g e executar o comando Mx gdb.

Se você estivesse fazendo isso de uma concha, você faria assim:

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

Isso parece funcionar dentro do emacs também.

Há várias maneiras de o fazer:

 $ 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 

em que o comando gdb run ( r ) usa por padrão os argumentos definidos anteriormente com set args .

Por questões de integridade ao iniciar uma session de debugging, há também a opção –args. ie)

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

E se você não precisar depurar desde o início, também poderá append a um processo já em execução usando:

 $ gdb myprogram xxx 

onde xxx é o id do processo. Então você não precisa dizer ao gdb os argumentos iniciais.