0

在尝试调试中的恐慌时kubelet,我一直在尝试附加delvekubelet可执行文件但未成功:

me@mycomputer:~$ sudo dlv attach 23796
could not attach to pid 23796: could not open debug info

fileobjdump --syms显示没有调试信息包含在kubelet

me@mycomputer:~$ file _output/bin/kubelet 
_output/bin/kubelet: ELF 64-bit LSB executable, x86-64, version 1 
(SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, 
BuildID[sha1]=c7a1645940f91048eea9086bd0500deb7ec75b38, for 
GNU/Linux 3.2.0, stripped

me@mycomputer:~$ objdump --syms _output/bin/kubelet 

_output/bin/kubelet:     file format elf64-x86-64
SYMBOL TABLE:
no symbols

我在构建时尝试了不同的选择kubelet

make WHAT=cmd/kubelet GOGCFLAGS=-dwarf

或者:

make WHAT=cmd/kubelet GOFLAGS=-dwarf

但仍然没有调试信息包含在可执行文件中。在我看来,该-w选项默认包含在 中go tool link,它去除了 DWARF 符号表以节省最终的可执行文件大小(请参见此处)。但我无法扭转这一点。

关于我应该如何构建kubelet以包含调试信息的任何想法?

4

1 回答 1

1

正如JimB建议的go build那样,诀窍是:

me@mycomputer:~/kubernetes/cmd/kubelet$ sudo go build kubelet.go
me@mycomputer:~/kubernetes/cmd/kubelet$ file ./kubelet
kubelet: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically 
linked, interpreter /lib64/ld-linux-x86-64.so.2, 
BuildID[sha1]=a1377345bfab4ca57b28af60eed92f23c81d7ae8, for GNU/Linux 3.2.0, 
not stripped

可以看出,调试信息不​​再被剥离。现在您可以将输出复制到_output/bin并使用delve.

于 2019-05-14T03:30:07.643 回答