如何使用 root 权限在 VS Code 中调试 Go 文件?

Дми*_*чук 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不会触发错误。

我尝试了几种方法:

  1. 启动时sudo code .会警告不建议这样做。另外,由于环境变量混乱,因此在此模式下使用 dlv 会出现问题。
  2. 使用本指南https://fatdragon.me/blog/2020/06/debug-golang-vs-code-linux-root。然而"go.alternateTools"似乎对“dlv”一无所知:Property dlv is not allowed.可能指南中缺少某些内容。
  3. 搜索.vscode/launch.json允许 sudo 的配置属性。VSC 允许对Python执行此操作,但不能对 Go 执行此操作。

有没有什么简单的方法可以使用 root 权限启动调试器?

环境:

  • 乌班图18.04
  • VSCode 1.48.0
  • 去1.13.4
  • 深入研究1.4.0

The*_*veO 9

2022 年 5 月更新

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 脚本的麻烦。