Дми*_*чук 7 go visual-studio-code delve vscode-debugger
如何强制 Delve in VS Code 使用 root 权限?
我正在尝试调试涉及 gopacket/pcap 的 go 文件:
hndl, err := pcapgo.NewEthernetHandle(ifname)
// err == "couldn't open packet socket: operation not permitted"
Run Code Online (Sandbox Code Playgroud)
使用启动相同的程序sudo不会触发错误。
我尝试了几种方法:
sudo code .会警告不建议这样做。另外,由于环境变量混乱,因此在此模式下使用 dlv 会出现问题。"go.alternateTools"似乎对“dlv”一无所知:Property dlv is not allowed.可能指南中缺少某些内容。.vscode/launch.json允许 sudo 的配置属性。VSC 允许对Python执行此操作,但不能对 Go 执行此操作。有没有什么简单的方法可以使用 root 权限启动调试器?
环境:
VSCode Go 插件文档中以 root 身份调试程序和测试已通过任务和启动配置示例进行了相应更新,不仅可以调试程序,还可以以 root 身份进行测试。
使用 VSCode 调试需要 root 权限的 Go 程序和测试一直很痛苦。从 VSCode 版本 1.65.0 开始,我注意到一个新的实验性启动选项"asRoot": "true" 需要与"console": "integratedTerminal".
例如,在您的launch.json:
{
"version": "0.2.0",
"configurations": [
{
"name": "Test/dbg pkg as root",
"type": "go",
"request": "launch",
"mode": "test",
"program": "${fileDirname}",
"console": "integratedTerminal",
"asRoot": true,
},
]
}
Run Code Online (Sandbox Code Playgroud)
当按 F5 启动此配置时,将打开一个新的调试终端会话(或可能被重用)并执行以下命令:
/usr/bin/env GOPATH=/home/foobar/go /usr/bin/sudo /home/foobar/go/bin/dlv dap --check-go-version=false --client-addr=:41945
Run Code Online (Sandbox Code Playgroud)
现在,它会自动在其自身sudo之前插入命令dlv,因此需要将其启动到内部或外部交互式终端(因此在内部控制台中不起作用)。验证 sudo 后,VSCode 会切换回调试控制台视图,您就可以开始了。
现在,这可以避免将工作区中的命令重新映射dlv到包装器 shell 脚本的麻烦。