如何加载程序读取stdin并在gdb中获取参数?

时间:2009-01-18 17:36:20

标签: emacs gdb redirect command-line-arguments

  

我有一个从中获取输入的程序   stdin也需要一些参数   从命令行。它看起来像这样:

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

我尝试用gdb调试代码   在emacs内部,通过M-x gdb,我试着   使用以下命令加载程序:

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

然而,gdb不喜欢它。

来自here的问题。 不幸的是我不理解解决方案,除了使用-g选项编译并运行命令M-x gdb之外,我不知道该怎么做。

5 个答案:

答案 0 :(得分:118)

如果你是从shell那里做的,你就这样做:

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

这似乎也适用于emacs。

答案 1 :(得分:27)

有几种方法可以做到:

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

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

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

其中gdb run命令(r)默认使用先前使用set args设置的参数。

答案 2 :(得分:7)

为了完整起见,启动调试会话时还有--args选项。即)

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

答案 3 :(得分:0)

如果您不需要从一开始就进行调试,您还可以使用以下命令附加到已在运行的进程:

$ gdb myprogram xxx

其中xxx是进程ID。然后你不需要告诉gdb起始参数。

答案 4 :(得分:0)

这是十一年后的事,这个问题已经有了答案,但是对于将来像我这样的人,我只想添加一些东西。

运行gdb your_program后,如果只键入run < file_containing_input,该程序将一直运行到最后,并且您可能没有发现问题,因此在执行run < file_containing_input之前,请先执行打破。像这样

$ gdb your_program
gdb> break main
gdb> run < file_containing_input