Go Stackdriver 调试器错误加载程序
Go Stackdriver debugger error loading program
我正在尝试设置 Stackdriver debugging using Go. Using the article and this great medium post I came up with this solution。
关键部分,在cloudbuild.yaml
- name: gcr.io/cloud-builders/wget
args: [
"-O",
"go-cloud-debug",
"https://storage.googleapis.com/cloud-debugger/compute-go/go-cloud-debug"
]
...
我有 Dockerfile
...
COPY gopath/bin/stackdriver-demo /stackdriver-demo
ADD go-cloud-debug /
ADD source-context.json /
CMD ["/go-cloud-debug","-sourcecontext=./source-context.json", "-appmodule=go-errrep","-appversion=1.0","--","/stackdriver-demo"]
...
然而 pods 一直崩溃,容器日志显示此错误:
Error loading program: decoding dwarf section info at offset 0x0: too short
编辑:使用 https://storage.googleapis.com/cloud-debugger/compute-go/go-cloud-debug
可能已经过时,因为我还没有看到它在 Daz 的媒体 post 之外使用过。官方docs使用包cloud.google.com/go/cmd/go-cloud-debug-agent
我有更新 cloudbuild.yaml 文件来安装这个包:
- name: 'gcr.io/cloud-builders/go'
args: ["get", "-u", "cloud.google.com/go/cmd/go-cloud-debug-agent"]
env: ['PROJECT_ROOT=github.com/roberson34/stackdriver-demo', 'CGO_ENABLED=0', 'GOOS=linux']
- name: 'gcr.io/cloud-builders/go'
args: ["install", "cloud.google.com/go/cmd/go-cloud-debug-agent"]
env: ['PROJECT_ROOT=github.com/roberson34/stackdriver-demo', 'CGO_ENABLED=0', 'GOOS=linux']
并且在 Dockerfile
中我可以访问 gopath/bin/go-cloud-debug-agent
中的二进制文件
当我用我自己的程序作为参数执行 gopath/bin/go-cloud-debug-agent
时:
/go-cloud-debug-agent -sourcecontext=./source-context.json -appmodule=go-errrep -appversion=1.0 -- /stackdriver-demo
我收到另一个不透明的错误:
Error loading program: AttrStmtList not present or not int64 for unit 88
所以基本上使用 https://storage.googleapis.com/cloud-debugger/compute-go/go-cloud-debug
中的 cloud-debug
二进制文件和包 cloud.google.com/go/cmd/go-cloud-debug-agent
中的 cloud-debug-agent
二进制文件都不起作用,并给出不同的错误。
如有任何关于我做错了什么以及如何解决的提示,我将不胜感激。
好的:-)
是的,您应该遵循当前的 Stackdriver 文档,例如go-cloud-debug-agent
不幸的是,我的 post 现在有各种问题,包括区域的 gcr.io/cloud-builders/kubectl
(目前已损坏)。
我认为您的问题与您对 golang:alpine
的使用有关。 Alpine 使用 musl 而不是你在大多数其他 Linux 发行版中找到的 glibc,因此,你真的必须为 Alpine 编译以确保你的二进制文件引用正确的 libc。
我能够让您的解决方案主要通过切换您的 Dockerfile 以在 Alpine 上拉 Cloud Debug Agent 并在 Alpine 上编译您的源代码:
FROM golang:alpine
RUN apk add git
RUN go get -u cloud.google.com/go/cmd/go-cloud-debug-agent
ADD main.go src
RUN CGO_ENABLED=0 go build -gcflags=all='-N -l' src/main.go
ADD source-context.json /
CMD ["bin/go-cloud-debug-agent","-sourcecontext=/source-context.json", "-appmodule=stackdriver-demo","-appversion=1.0","--","main"]
我认为这应该能让您摆脱记录的错误,您应该能够将容器部署到 Kubernetes。
我已经公开了我的图像版本(并将为您保留几天):
gcr.io/dazwilkin-190402-55473323/roberson34@sha256:17cb45f1320e2fe04e0681310506f4c229896429192b0d1c2c8dc20ed54adb0d
您可能希望在您的 deployment.yaml
中引用它(通过该摘要)
NB 要使错误报告成为 "interesting",您的代码需要生成错误,并且对于您的示例,这将具有挑战性(通常是一件好事).您可以考虑添加另一个总是导致错误的错误处理程序,以便您可以测试服务。
我正在尝试设置 Stackdriver debugging using Go. Using the article and this great medium post I came up with this solution。
关键部分,在cloudbuild.yaml
- name: gcr.io/cloud-builders/wget
args: [
"-O",
"go-cloud-debug",
"https://storage.googleapis.com/cloud-debugger/compute-go/go-cloud-debug"
]
...
我有 Dockerfile
...
COPY gopath/bin/stackdriver-demo /stackdriver-demo
ADD go-cloud-debug /
ADD source-context.json /
CMD ["/go-cloud-debug","-sourcecontext=./source-context.json", "-appmodule=go-errrep","-appversion=1.0","--","/stackdriver-demo"]
...
然而 pods 一直崩溃,容器日志显示此错误:
Error loading program: decoding dwarf section info at offset 0x0: too short
编辑:使用 https://storage.googleapis.com/cloud-debugger/compute-go/go-cloud-debug
可能已经过时,因为我还没有看到它在 Daz 的媒体 post 之外使用过。官方docs使用包cloud.google.com/go/cmd/go-cloud-debug-agent
我有更新 cloudbuild.yaml 文件来安装这个包:
- name: 'gcr.io/cloud-builders/go'
args: ["get", "-u", "cloud.google.com/go/cmd/go-cloud-debug-agent"]
env: ['PROJECT_ROOT=github.com/roberson34/stackdriver-demo', 'CGO_ENABLED=0', 'GOOS=linux']
- name: 'gcr.io/cloud-builders/go'
args: ["install", "cloud.google.com/go/cmd/go-cloud-debug-agent"]
env: ['PROJECT_ROOT=github.com/roberson34/stackdriver-demo', 'CGO_ENABLED=0', 'GOOS=linux']
并且在 Dockerfile
中我可以访问 gopath/bin/go-cloud-debug-agent
当我用我自己的程序作为参数执行 gopath/bin/go-cloud-debug-agent
时:
/go-cloud-debug-agent -sourcecontext=./source-context.json -appmodule=go-errrep -appversion=1.0 -- /stackdriver-demo
我收到另一个不透明的错误:
Error loading program: AttrStmtList not present or not int64 for unit 88
所以基本上使用 https://storage.googleapis.com/cloud-debugger/compute-go/go-cloud-debug
中的 cloud-debug
二进制文件和包 cloud.google.com/go/cmd/go-cloud-debug-agent
中的 cloud-debug-agent
二进制文件都不起作用,并给出不同的错误。
如有任何关于我做错了什么以及如何解决的提示,我将不胜感激。
好的:-)
是的,您应该遵循当前的 Stackdriver 文档,例如go-cloud-debug-agent
不幸的是,我的 post 现在有各种问题,包括区域的 gcr.io/cloud-builders/kubectl
(目前已损坏)。
我认为您的问题与您对 golang:alpine
的使用有关。 Alpine 使用 musl 而不是你在大多数其他 Linux 发行版中找到的 glibc,因此,你真的必须为 Alpine 编译以确保你的二进制文件引用正确的 libc。
我能够让您的解决方案主要通过切换您的 Dockerfile 以在 Alpine 上拉 Cloud Debug Agent 并在 Alpine 上编译您的源代码:
FROM golang:alpine
RUN apk add git
RUN go get -u cloud.google.com/go/cmd/go-cloud-debug-agent
ADD main.go src
RUN CGO_ENABLED=0 go build -gcflags=all='-N -l' src/main.go
ADD source-context.json /
CMD ["bin/go-cloud-debug-agent","-sourcecontext=/source-context.json", "-appmodule=stackdriver-demo","-appversion=1.0","--","main"]
我认为这应该能让您摆脱记录的错误,您应该能够将容器部署到 Kubernetes。
我已经公开了我的图像版本(并将为您保留几天):
gcr.io/dazwilkin-190402-55473323/roberson34@sha256:17cb45f1320e2fe04e0681310506f4c229896429192b0d1c2c8dc20ed54adb0d
您可能希望在您的 deployment.yaml
NB 要使错误报告成为 "interesting",您的代码需要生成错误,并且对于您的示例,这将具有挑战性(通常是一件好事).您可以考虑添加另一个总是导致错误的错误处理程序,以便您可以测试服务。