You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MacBook M1 Docker环境下调试amd64二进制文件的GDB输入重定向问题

解决方案

问题根源

你在shell中执行gdb ./test_input_x86_64 < my_test_input.txt时,文件内容被直接传给了gdb进程,而非被调试的test_input_x86_64程序,因此gdb会把Hello当成未知命令报错——这是重定向目标错误导致的,和Rosetta或Docker环境本身无关。

可行解决方法

方法1:启动程序时直接绑定输入文件

启动被调试程序时就完成输入重定向,再通过gdb连接Rosetta debugserver:

  1. 启动带输入重定向的程序并开启debugserver:
    ROSETTA_DEBUGSERVER_PORT=1234 ./test_input_x86_64 < my_test_input.txt &
    
  2. 启动gdb并加载程序符号:
    gdb ./test_input_x86_64
    
  3. 连接到Rosetta debugserver:
    target remote localhost:1234
    
  4. 正常设置断点、单步调试即可。如果需要在程序读取输入前中断,可以提前编写gdb命令脚本(比如写入break main),用gdb -x debug_commands.txt ./test_input_x86_64启动。

方法2:在gdb中指定程序的输入源

如果程序已经通过debugserver启动且尚未读取输入,可在gdb中直接指定程序的输入文件:

  1. 按原有步骤启动程序和gdb并连接debugserver
  2. 在gdb中执行:
    set inferior-tty my_test_input.txt
    
  3. 执行continue,程序会从指定文件读取输入。

方法3:混合文件输入与交互式调试

如果需要程序先读取文件内容,之后保留终端交互能力(方便调试时手动输入),可以用管道组合输入:

ROSETTA_DEBUGSERVER_PORT=1234 cat my_test_input.txt - | ./test_input_x86_64 &

之后按正常流程连接gdb调试即可,程序会先读取文件内容,再等待终端输入。


内容的提问来源于stack exchange,提问作者billwang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 03:15:56