Как собрать Kubernetes, чтобы отладочная информация была включена в исполняемые файлы? - PullRequest
0 голосов
/ 29 апреля 2019

При попытке отладить панику в kubelet я безуспешно пытался прикрепить delve к kubelet исполняемому файлу:

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

file и objdump --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, чтобы включить отладочную информацию?

1 Ответ

1 голос
/ 14 мая 2019

Как и советовал 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.

...