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

如何使用dlv调试带有输入输出文件重定向的Go二进制程序

问题原因及正确解法

你的操作存在的3个核心问题

  • 你直接在dlv命令末尾使用shell级别的< >重定向符号,默认这些重定向会作用于dlv本身,而非你要调试的runme程序。dlv默认需要绑定终端来接收用户输入的调试指令,所以会报Stdin is not a terminal错误。
  • 你使用-r参数的方式错误:-r是dlv的参数,需要紧跟重定向规则,不能把二进制程序路径./runme当做-r的参数值,你之前的写法相当于给-r传了无效的规则,所以报错和之前完全一致。
  • 你添加--allow-non-terminal-interactive=true之后,dlv的标准输入被重定向到了plaintext.txt,文件里存储的是要加密的业务数据而非dlv的调试命令,dlv读不到合法指令就会返回Command failed: command not available。

正确调试命令

dlv exec ./runme -r stdin:plaintext.txt -r stdout:encrypted.txt -- encrypt --password=password

参数说明

  • 所有dlv专属参数必须放在--分隔符之前,目标程序runme的参数放在--之后
  • -r stdin:plaintext.txt:指定目标程序runme的标准输入来源为plaintext.txt
  • -r stdout:encrypted.txt:指定目标程序runme的标准输出写入到encrypted.txt
  • 不需要额外加shell重定向符号,dlv本身的输入输出依然绑定终端,你可以正常输入break、continue等调试命令。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 20:48:00