在vscode上使用stdin调试go程序
在vscode上调试go程序时,如果程序中带有scanf等从stdin读取数据的代码,运行到stdin语句处会导致调试过程无法进行。本文介绍一种规避方法,以达到vscode debug时使用stdin的目的。
将luanch.json
替换为如下内容:
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Attach Package",
"type": "go",
"request": "attach",
"mode": "remote",
"host": "127.0.0.1",
"port": 37293
}
]
}
必须在与待调试文件相同的路径下启动dlv程序,port要与上文launch.json
中填入的端口号相对应。
dlv debug --headless --listen=:37293 --log --api-version=2
按f5
启动调试后,在terminal中输入程序要从stdin读取的值,按回车确认,程序可成功执行到下个断点处。
调试命令过长,可在~/.zshrc
中使用alias命令添加别名:
alias vscode-debug="dlv debug --headless --listen=:37293 --log --api-version=2"