【问题标题】:Go Stackdriver debugger error loading programGo Stackdriver 调试器错误加载程序
【发布时间】:2019-08-23 16:39:15
【问题描述】:

我正在尝试使用 Go 设置 Stackdriver debugging。使用这篇文章和这个很棒的medium post 我想出了这个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"]

...

尽管 pod 不断崩溃,但容器日志显示此错误:

Error loading program: decoding dwarf section info at offset 0x0: too short

编辑:使用 https://storage.googleapis.com/cloud-debugger/compute-go/go-cloud-debug 可能已经过时,因为我没有看到它在 Daz 的中型帖子之外使用过。官方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 二进制文件都不起作用并给出不同的错误。

对于我做错了什么以及如何解决它的任何提示,我们将不胜感激。

【问题讨论】:

  • 啊奉承 ;-) 感谢 cmets 的好意。让我看看这个,看看我是否还能让它工作。

标签: kubernetes google-kubernetes-engine stackdriver google-cloud-stackdriver


【解决方案1】:

好的:-)

是的,您应该遵循当前的 Stackdriver 文档,例如go-cloud-debug-agent

不幸的是,我的帖子现在存在各种问题,包括(目前已损坏)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要使错误报告“有趣”,您的代码需要生成错误,并且在您的示例中,这将具有挑战性(通常是一件好事)。您可以考虑添加另一个总是导致错误的错误处理程序,以便您可以测试服务。

【讨论】:

    猜你喜欢
    • 2021-09-25
    • 2022-08-16
    • 2010-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-03
    • 2011-12-09
    • 1970-01-01
    相关资源
    最近更新 更多