gdb中的输入重定向(MinGW)

gdb中的输入重定向(MinGW),gdb,mingw,Gdb,Mingw,我正试图让gdb运行带有输入重定向到stdin的程序。例如,如果没有gdb,我将运行如下程序: prog < input.txt prog”、“2>&1”等。这会影响GDB 命令,如“run”、“start”和“set args”,以及 相应的MI功能 我遇到了与OP相同的问题。但是,我无法使用第三种解决方案。这是在gdb 7.5.50上的。第二个解决方案是如何工作的?如何确保调试对象启动时,在您有机会将gdb连接到它之前,它不会运行到完成状态?@greatwolf这取决于您的程序细节。

我正试图让gdb运行带有输入重定向到stdin的程序。例如,如果没有gdb,我将运行如下程序:

prog < input.txt
prog
现在在gdb中,通常的方法是运行
run
。但是,它对我不起作用,在执行此操作时,没有任何内容被重定向到stdin


我正在使用Windows和MinGW。可能是什么问题?

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

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

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


MinGW附带的工具通常不是最新版本,并且通常省略了以下功能:耸耸肩::

早在90年代末,中断的命令行重定向就是一个问题。我怀疑它仍然是这样,因为
gdb
mingw32
端口仍然愉快地将所有
run
参数(包括重定向)一字不差地传递给被调试者

几种可能的解决办法:

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


  • 从GDB 8.0开始支持输入重定向。从新闻文件:

    • MS Windows上的本机调试支持命令行重定向

      用于在MS Windows上启动程序的命令行参数 现在可以包括本机Windows支持的重定向符号 shell,例如“”、“>>”、“2>&1”等。这会影响GDB 命令,如“run”、“start”和“set args”,以及 相应的MI功能


    我遇到了与OP相同的问题。但是,我无法使用第三种解决方案。这是在gdb 7.5.50上的
    。第二个解决方案是如何工作的?如何确保调试对象启动时,在您有机会将gdb连接到它之前,它不会运行到完成状态?@greatwolf这取决于您的程序细节。比如,在C/C++中,可以通过发出信号来实现-请参见
    
    # gdb debugee.exe
    (gdb) b main
    (gdb) run non-redirect-arguments-if-any
    (gdb) p dup2(open("/tmp/input.txt", 0), 0) 
    (gdb) c