111

我有一个从标准输入获取输入并从命令行获取一些参数的程序。它看起来像这样:

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

我尝试在 emacs 中使用 gdb 调试代码,通过 Mx gdb,我尝试使用以下命令加载程序:

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

但是,gdb 不喜欢它。

这里抄袭的问题。不幸的是,我不了解解决方案,并且不确定除了使用-g选项编译和运行命令 Mx gdb 之外还能做什么。

4

5 回答 5

145

如果你是从 shell 做的,你会这样做:

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

这似乎也适用于 emacs。

于 2009-01-18T17:53:37.207 回答
33

有几种方法可以做到:

$ 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

其中 gdbrun命令 ( r) 默认使用之前设置的参数set args

于 2011-09-19T15:39:03.840 回答
6

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

gdb gdbarg1 gdbarg2 --args yourprog arg1 arg2 -x arg3
于 2009-01-20T03:05:07.263 回答
3

十一年后了,这个问题已经有了答案,但是对于以后像我这样的人,我只是想补充一点。

运行后gdb your_program,如果只键入run < file_containing_input,程序将一直运行到最后,您可能无法发现问题,所以在您做之前先run < file_containing_input休息一下。像这样的东西

$ gdb your_program
gdb> break main
gdb> run < file_containing_input
于 2020-11-21T07:03:09.757 回答
0

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

$ gdb myprogram xxx

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

于 2009-02-14T00:57:41.210 回答