猿问

无法调试 golang 应用程序深入研究,因为错误:无法附加到 pid XXX:无法打开调试信息

所以我想调试一个在k8s集群上运行的golang应用程序,但是当我想附加到应用程序时,我收到错误消息。


在 k8s 部署中,我添加了所需的权限:


    securityContext:

    capabilities:

      add:

        - SYS_PTRACE

    privileged: true

    runAsUser: 0

    allowPrivilegeEscalation: true

我用所需的 gcflags “all=-N -l” 编译了我的应用程序


go build -mod vendor -gcflags "all=-N -l" --ldflags -w -s -o app


我用以下命令开始 pod:


dlv --listen=:40000 --headless=true --api-version=2 --accept-multiclient exec /app


我验证了我运行正确的容器映像,它是我推送的相同SHA哈希。我验证了哈希值在这里也匹配的正确二进制文件。


我设置:


echo 0 > /proc/sys/kernel/yama/ptrace_scope

cat /proc/sys/kernel/yama/ptrace_scope

0

下面是二进制文件的输出。readelf -S app


繁星淼淼
浏览 160回答 1
1回答

幕布斯7119047

您将作为标志传递给链接器。-s -w根据cmd/link的文档:-s:省略符号表和调试信息。-w:省略矮人符号表。简而言之,生成命令将删除调试器调试所需的信息。如果删除(或仅删除 ),它应该按预期工作。-ldflags-s -w
随时随地看视频慕课网APP

相关分类

Go
我要回答