在gdb(MinGW)中输入重定向

Ran*_*Ran 20 gdb mingw

我正在尝试让gdb运行带有输入重定向到stdin的程序.例如,没有gdb我会运行这样的程序:

prog < input.txt
Run Code Online (Sandbox Code Playgroud)

现在在gdb中,通常的做法是run < input.txt.但是,它对我不起作用,当这样做时,没有任何东西被重定向到stdin.

我正在使用Windows与MinGW.可能是什么问题呢?

vla*_*adr 13

早在90年代末期,破坏的命令行重定向就是一个众所周知的假定限制.我怀疑的是,它仍然是这样,因为mingw32港口gdb仍然兴高采烈地传递逐字的所有run参数(包括重定向)到被调试.

几种可能的解决方法:

  1. 如果您可以选择更改命令行界面,那么请执行bbadour建议
  2. 否则,如果您可以在要调试的点之前轻松挂起进程,则从shell调用debugee(带有重定向)并在它已经运行时附加到它
  3. 否则,如果你有符号被调试(gcc -g),或者你知道的地址main()(gcc -Wl,-Map,mapfile),并可以设置一个断点,请通过以下方式(经测试mingw gdb 6.8.0):

    # gdb debugee.exe
    (gdb) b main
    (gdb) run non-redirect-arguments-if-any
    (gdb) p dup2(open("/tmp/input.txt", 0), 0) 
    (gdb) c
    
    Run Code Online (Sandbox Code Playgroud)


bba*_*our 2

我在这里遇到了同样的问题,我刚刚养成了添加命令行参数以允许从文件中获取输入的习惯。

例如,使用 argc 和 argv 解析“-i ifile”参数以从 ifile 而不是 stdin 获取输入,并解析“-o ofile”以将输出写入 ofile 而不是 stdout。

然后我只使用这些参数而不是重定向。

MinGW 附带的工具通常不是最新版本,并且经常省略某些功能。::耸肩::