如何强制VS代码中的Delve使用root权限?
我正在尝试调试涉及gopacket/pcap:的go文件
hndl, err := pcapgo.NewEthernetHandle(ifname)
// err == "couldn't open packet socket: operation not permitted"
使用sudo
启动同一程序不会触发错误。
我试过几种方法:
- 启动
sudo code .
它会发出警告,表示不建议这样做。此外,在这种模式下使用dlv也存在一些问题,因为环境变量被搞砸了 - 使用本指南https://fatdragon.me/blog/2020/06/debug-golang-vs-code-linux-root.然而CCD_ 3似乎对";dlv":
Property dlv is not allowed.
指南中可能遗漏了什么 - 搜索允许sudo的
.vscode/launch.json
配置属性。VSC允许Python这样做,但不允许Go这样做
有什么简单的方法可以用root权限启动调试器吗?
环境:
- Ubuntu 18.04
- VSCode 1.48.0
- 转到1.13.4
- Delve 1.4.0
2022年5月更新
在VSCode Go插件的文档中,以root身份调试程序和测试已经相应地更新了任务和启动配置示例,不仅可以调试程序,还可以以root身份进行测试。
旧
使用VSCode调试Go程序和需要root权限的测试已经很长一段时间了。从VSCode版本1.65.0开始,我注意到了一个新的实验性发射选项"asRoot": "true"
🙌需要与CCD_ 7相结合。
例如,在您的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,
},
]
}
当按下F5启动此配置时,将打开一个新的调试终端会话(或可能被重用(,并执行以下命令:
/usr/bin/env GOPATH=/home/foobar/go /usr/bin/sudo /home/foobar/go/bin/dlv dap --check-go-version=false --client-addr=:41945
这将自动在dlv
之前插入sudo
命令,因此需要将其启动到内部或外部交互式终端中(因此在内部控制台中不起作用(。在向sudo进行身份验证后,VSCode切换回调试控制台视图,您就可以开始了。
这就避免了将工作区中的dlv
命令重新映射到包装外壳脚本的麻烦。