gdb中的输入重定向(MinGW)
我正试图让gdb运行带有输入重定向到stdin的程序。例如,如果没有gdb,我将运行如下程序: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这取决于您的程序细节。
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
的建议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功能
。第二个解决方案是如何工作的?如何确保调试对象启动时,在您有机会将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