使用 cygwin 进行 gdb 输入重定向

发布于 2024-12-29 05:03:46 字数 129 浏览 0 评论 0原文

看来 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

靖瑶 2025-01-05 05:03:46

不幸的是,在 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:

  • Add a command line argument, e.g. -f whatever with whatever 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:

    > gdb yourexecutable
    (gdb) break main
    (gdb) run
    (gdb) call dup2(open("input.txt", 0), 0)
    (gdb) continue
    

    This sets a breakpoint on the main function, then executes the program which will break right after entering main. Then dup2 is used to replace the stdin fd (0) with a file descriptor of the input file.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文