使用cygwin的gdb输入重定向

cha*_*mae 12 cygwin gdb

似乎gdb中的输入重定向在Cygwin中不起作用,例如

(gdb) run < input.txt
Run Code Online (Sandbox Code Playgroud)

有没有其他方法可以在Cygwin的gdb中重定向输入?

Thi*_*ter 12

不幸的是,在cygwin中运行gdb时,这是不可能的.该错误很长一段时间都存在,但显然这是一个很难解决的问题 - 可能gdb开发人员更喜欢花时间处理与更常见环境(如Linux)相关的功能/问题.

有各种可能的解决方法; 我更喜欢第一个,因为它是最干净的,也是有用的,而不是在cygwin上调试/运行:

  • 添加命令行参数,例如-f whateverwhatever正在从中读取数据的文件名.如果参数不存在或设置为-,则从stdin读取.该-f -选项当然是可选的,但对于接受文件名的参数,它是一个通用标准(只要它有意义)-作为"使用stdin/out" 来处理.
  • 使用此处提到的gdb hack 将stdin重新映射到应用程序内的手动打开的文件:

    > gdb yourexecutable
    (gdb) break main
    (gdb) run
    (gdb) call dup2(open("input.txt", 0), 0)
    (gdb) continue
    
    Run Code Online (Sandbox Code Playgroud)

    这会在main函数上设置断点,然后执行将在输入后立即中断的程序main.然后dup2用于将stdin fd(0)替换为输入文件的文件描述符.