【发布时间】:2022-02-01 13:06:45
【问题描述】:
尝试调试 go 应用程序时,我收到以下类似的错误消息。
我最初尝试使用以下 vscode launch.json 调试简单的 golang 程序:
{
"version": "0.2.0",
"configurations": [
{
"name": "Launch Package",
"type": "go",
"request": "launch",
"mode": "auto",
"program": "${workspaceFolder}"
}
]
}
我得到的是:
无法启动进程:fork/exec /tmp/__debug_bin1874603807:不允许操作
设置"debugAdapter": "legacy" 会导致类似的结果:
无法启动进程:fork/exec /home/user/test/__debug_bin: operation not allowed
从命令行启动 dlv 有相同的输出:
user@my-machine:~/test$ /home/user/go/bin/dlv 调试 无法启动进程:fork/exec /home/user/test/__debug_bin:不允许操作
我已测试允许从 /tmp 运行文件;我尝试在/etc/sysctl.d/10-ptrace.conf 中设置kernel.yama.ptrace_scope = 0,因为我能找到的所有关于此错误的信息都与ptrace (https://github.com/go-delve/delve/issues/515) 有关。
另外值得一提的是,该命令以 root 身份运行:
user@my-machine:~/test$ su root
Password:
root@my-machine:/home/user/test# export PATH=$PATH:/usr/local/go/bin
root@my-machine:/home/user/test# go version
go version go1.17.6 linux/amd64
root@my-machine:/home/user/test# ../go/bin/dlv debug
Type 'help' for list of commands.
(dlv) quit
删除 dlv 二进制文件并运行 go install github.com/go-delve/delve/cmd/dlv@latest 重新安装 dlv 没有帮助。我有一个全新的 Ubuntu Server 20.04 安装。
如何解决调试问题?
【问题讨论】:
-
您是否验证了
/home/user/test/__debug_bin实际上具有必要的权限位(即,您的凭据用户或您的凭据组之一的+x)? -
啊,看来这个二进制文件是
go build的人工制品;好的,您是否验证了/tmp没有安装noexec标志?例如,在我的 Debian Buster (11) 系统上,mount -t tmpfs显示许多此类文件系统都安装有noexec,这是防止某些类别的 RCE 攻击的常用措施。它不包括/tmp但那不是 Ubuntu。 -
@kostix /tmp 未安装,问题有不同的根源。
-
在将设置放入其中后,您是否重新启动/重新加载了负责读取这些
sysctl配置的单元?
标签: go ubuntu ubuntu-20.04 delve