使用 cygwin 进行 gdb 输入重定向
看来 gdb 中的输入重定向在 Cygwin 中不起作用,例如
(gdb) run < input.txt
是否有其他方法可以在 Cygwin 的 gdb 中重定向输入?
It seems that input redirection in gdb does not work in Cygwin e.g
(gdb) run < input.txt
Is there other way to redirect input in gdb of Cygwin??
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
不幸的是,在 cygwin 中运行 gdb 时这是不可能的。 bug 存在很长时间,但显然这是一个困难一个需要修复的问题 - 也许 gdb 开发人员更喜欢花时间在与更常见的环境(例如 Linux)相关的功能/问题上。
有多种可能的解决方法;我更喜欢第一个,因为它是最干净的,并且在不在 cygwin 上调试/运行时也很有用:
-fwhatever
,其中whatever
是要读取的文件名。如果参数不存在或设置为-
,则从 stdin 读取。-f -
选项当然是可选的,但对于接受文件名的参数来说,将-
处理为“使用 stdin/out”是一个通用标准(只要有意义) 。使用此处提到的 gdb hack 将 stdin 重新映射到应用程序内手动打开的文件:
<前><代码>> gdb 你的可执行文件
(gdb) 中断主程序
(gdb)运行
(gdb) 调用 dup2(open("input.txt", 0), 0)
(gdb)继续
这会在
main
函数上设置断点,然后执行进入main
后立即中断的程序。然后使用dup2
来替换 stdin fd (< code>0) 和输入文件的文件描述符。Unfortunately this is not possible when running gdb in cygwin. The bug exists for a quote long time, but apparently it's a hard one to fix - and probably the gdb devs prefer spending time on features/issues relevant to more common environments (such as Linux).
There are various possible workarounds; I'd prefer the first one since it's the cleanest and also useful while not debugging / running on cygwin:
-f whatever
withwhatever
being the filename to read from. If the argument is not present or set to-
, read from stdin. The-f -
option is optional of course but for arguments accepting filenames it's a common standard (as long as it makes sense) to handle-
as "use stdin/out".Use the gdb hack mentioned here to remap stdin to a manually opened file inside the application:
This sets a breakpoint on the
main
function, then executes the program which will break right after enteringmain
. Thendup2
is used to replace the stdin fd (0
) with a file descriptor of the input file.