我有一个从中获取输入的程序 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之外,我不知道该怎么做。
答案 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