似乎gdb中的输入重定向在Cygwin中不起作用,例如
(gdb) run < input.txt
还有其他方法可以在Cygwin的gdb中重定向输入吗?
答案 0 :(得分:12)
不幸的是,在cygwin中运行gdb时,这是不可能的。 bug很长一段时间都存在引用,但显然很难解决 - 可能gdb开发人员更喜欢花时间处理与更常见环境(如Linux)相关的功能/问题。
有各种可能的解决方法;我更喜欢第一个,因为它是最干净的,也是有用的,而不是在cygwin上调试/运行:
-f whatever
whatever
是要读取的文件名。如果参数不存在或设置为-
,则从标准输入读取。 -f -
选项当然是可选的,但对于接受文件名的参数,将-
作为“使用stdin / out”处理是一个通用标准(只要有意义)。使用提到的here gdb hack将stdin重新映射到应用程序内的手动打开文件:
> gdb yourexecutable
(gdb) break main
(gdb) run
(gdb) call dup2(open("input.txt", 0), 0)
(gdb) continue
这会在main
函数上设置断点,然后执行将在输入main
后立即中断的程序。然后使用dup2
将stdin fd(0
)替换为输入文件的文件描述符。