VSCode中如何以Root身份运行dlv调试Go程序
VSCode Go调试指定Root用户dlv路径的解决方案
问题背景
我的launch.json配置如下:
{ "name": "Launch as Root", "type": "go", "request": "launch", "mode": "debug", "program": "${fileDirname}", "env": {}, "args": [], "console": "internalConsole", "asRoot": true, }
点击VSCode调试按钮时,调试控制台会从/home/1033/Dev/kite/mypackage路径运行/home/1033/go/bin/dlv dap --listen=127.0.0.1:45505 --log-dest=3。由于该dlv并非Root用户的版本,调试程序时出现权限问题。但在终端使用Root用户的/bin/dlv调试则无任何问题。
已尝试过配置go.alternateTools参数、为/home/1033/go/bin/dlv赋予管理员权限,但均未解决问题。以Root权限打开VSCode可成功使用/bin/dlv,但因程序闪烁问题不想采用此方案。
解决方法
方法一:直接指定dlv路径
在launch.json中添加dlvToolPath字段,强制指定Root用户的dlv路径,修改后的配置如下:
{ "name": "Launch as Root", "type": "go", "request": "launch", "mode": "debug", "program": "${fileDirname}", "env": {}, "args": [], "console": "internalConsole", "asRoot": true, "dlvToolPath": "/bin/dlv" }
该字段优先级高于go.alternateTools,会直接让VSCode使用指定的dlv程序进行调试。
方法二:通过sudo脚本调用dlv
如果方法一仍存在权限问题,可以通过自定义脚本用sudo调用Root的dlv:
- 创建脚本文件
/home/1033/dlv-root.sh,内容如下:
#!/bin/bash sudo /bin/dlv "$@"
- 给脚本添加执行权限:
chmod +x /home/1033/dlv-root.sh
- 修改launch.json中的
dlvToolPath为该脚本路径:
"dlvToolPath": "/home/1033/dlv-root.sh"
- 为避免每次调试输入密码,执行
visudo命令编辑sudoers文件,添加以下内容:
1033 ALL=(ALL) NOPASSWD: /bin/dlv
内容的提问来源于stack exchange,提问作者Linhan Xu
相关产品推荐
相关产品推荐

