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

vin*_*456 95 emacs redirect gdb command-line-arguments

我有一个程序从stdin获取输入,并从命令行获取一些参数.它看起来像这样:

cat input.txt > myprogram -path "/home/user/work"
Run Code Online (Sandbox Code Playgroud)

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

gdb cat input.txt > myprogram -path "/home/user/work"
Run Code Online (Sandbox Code Playgroud)

但是,gdb不喜欢它.

问题来自这里.不幸的是我不理解解决方案,并且不确定除了使用该-g选项进行编译并运行命令Mx gdb 之外还要做什么.

Aln*_*tak 122

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

% gdb myprogram
gdb> run params ... < input.txt
Run Code Online (Sandbox Code Playgroud)

这似乎也适用于emacs.

  • 一个迟来的谢谢你 - gdb手册是一个痛苦的屁股疏通. (2认同)

max*_*zig 28

有几种方法可以做到:

$ gdb myprogram
(gdb) r -path /home/user/work < input.txt
Run Code Online (Sandbox Code Playgroud)

要么

$ gdb myprogram
(gdb) set args -path /home/user/work < input.txt
(gdb) r
Run Code Online (Sandbox Code Playgroud)

要么

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

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

  • 当我在cygwin中使用gdb尝试此操作时,它不起作用."show args"命令显示我输入了我想要的args,但是当我用"r"启动程序时,程序会一直等到输入内容而不是从指定文件中读取. (3认同)

Hil*_*lea 7

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

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

$ gdb your_program
gdb> break main
gdb> run < file_containing_input
Run Code Online (Sandbox Code Playgroud)


vin*_*456 6

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

gdb gdbarg1 gdbarg2 --args yourprog arg1 arg2 -x arg3
Run Code Online (Sandbox Code Playgroud)

  • 在开始像这样的调试会话时,你如何将input.txt重定向为你的程序员的输入? (13认同)
  • 仅当“yourprog”需要文件名来指定输入而不是输入重定向时才有效。 (3认同)