登录
首页 >  Golang >  Go问答

调试带有输入和输出文件重定向的 Go 二进制文件的方法是什么?

来源:stackoverflow

时间:2024-03-17 22:27:28 242浏览 收藏

在使用 Go 的 dlv 调试器调试二进制文件时,如果涉及输入和输出文件重定向,则需要采取特定步骤。默认情况下,dlv 不允许非终端输入重定向,因此需要使用 -r 标志指定重定向。此外,如果重定向的目标不是终端,则需要使用 --allow-non-terminal-interactive=true 标志覆盖默认设置。

问题内容

我有一个名为“runme”的 go 二进制文件,它成功运行如下:

./runme encrypt --password=password < plaintext.txt > encrypted.txt

它成功读取名为“plaintext.txt”的文件并输出名为“encrypted.txt”的加密文件。

现在我想使用 go 的 dlv 调试器来调试它,如下所示:

dlv exec  ./runme -- encrypt -password=password < plaintext.txt > encrypted.txt

但是我从 dlv 调试器收到以下错误消息:

stdin is not a terminal, use '-r' to specify redirects for the target process or --allow-non-terminal-interactive=true if you really want to specify a redirect for delve

所以我再次尝试稍微不同:

dlv exec -r ./runme -- encrypt -password=password < plaintext.txt > encrypted.txt

但我收到与上面显示的完全相同的错误消息。然后我尝试以下操作:

dlv exec --allow-non-terminal-interactive=true  ./runme -- encrypt -password=password < plaintext.txt > encrypted.txt

这次我收到了不同的错误消息:

Command failed: command not available

这似乎是一件简单的事情,我无法在调试器中完成。我可能做错了什么?


正确答案


在 @tkausl 和 @gopher 的帮助下,我终于弄清楚了。

解决方案是:

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

文中关于的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《调试带有输入和输出文件重定向的 Go 二进制文件的方法是什么?》文章吧,也可关注golang学习网公众号了解相关技术文章。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>