繁体   English   中英

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

[英]How can I debug Go file in VS Code with root privileges?

如何强制 VS Code 中的 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 但是"go.alternateTools"似乎对“dlv”一无所知: Property dlv is not allowed. 指南中可能缺少某些内容。
  3. 搜索允许 sudo 的.vscode/launch.json配置属性。 VSC 允许对Python执行此操作,但不允许对 Go 执行此操作。

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

环境:

  • Ubuntu 18.04
  • VSCode 1.48.0
  • Go 1.13.4
  • 钻研 1.4.0

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,
        },
    ]
}

通过按 F5 启动此配置时,新的调试终端 session 打开(或可能被重用)并执行以下命令:

/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 切换回调试控制台视图,您对 go 很好。

现在,这避免了将工作区中的dlv命令重新映射到包装器 shell 脚本的麻烦。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM