如何使用root权限调试VS代码中的Go文件



如何强制VS代码中的Delve使用root权限?

我正在尝试调试涉及gopacket/pcap:的go文件

hndl, err := pcapgo.NewEthernetHandle(ifname)
// err == "couldn't open packet socket: operation not permitted"

使用sudo启动同一程序不会触发错误。

我试过几种方法:

  1. 启动sudo code .它会发出警告,表示不建议这样做。此外,在这种模式下使用dlv也存在一些问题,因为环境变量被搞砸了
  2. 使用本指南https://fatdragon.me/blog/2020/06/debug-golang-vs-code-linux-root.然而CCD_ 3似乎对";dlv":Property dlv is not allowed.指南中可能遗漏了什么
  3. 搜索允许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命令重新映射到包装外壳脚本的麻烦。

最新更新