使用 `dlv` 调试 `dockerd` 失败
Debugging `dockerd` with `dlv` fails
我正在尝试使用 dlv
调试器来理解 dockerd
中的某些内容。不幸的是,每次我尝试这样做时都会遇到错误。我做不到 dlv exec
也做不到 dlv attach
。
以下差异显示了我对 docker/docker
应用的一些更改,以确保避免某些 go 优化并可以进行调试:
diff --git i/hack/make/.binary w/hack/make/.binary
index d56e3f3..e6835fa 100644
--- i/hack/make/.binary
+++ w/hack/make/.binary
@@ -84,6 +84,7 @@ hash_files() {
go build \
-o "$DEST/$BINARY_FULLNAME" \
"${BUILDFLAGS[@]}" \
+ -gcflags="all=-N -l" \
-ldflags "
$LDFLAGS
$LDFLAGS_STATIC_DOCKER
我还修改了 dockerd-rootless.sh
以确保我不使用普通的 exec
,而是 dlv exec dockerd -- $@
。不幸的是,每次我收到以下错误:
Could not create config directory: mkdir /root/.config: permission denied.could not launch process: could not get .debug_frame section: could not find .debug_frame section
当我尝试 dlv attach docker-pid
:
时发生同样的错误
could not attach to pid 228089: could not get .debug_frame section: could not find .debug_frame section
有人知道是什么原因造成的吗?
信息:
uname -a
Linux host 5.6.8-200.fc31.x86_64 #1 SMP Wed Apr 29 19:10:01 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
go version
go version go1.13.10 linux/amd64
dlv version
Delve Debugger
Version: 1.4.0
Build: $Id: 67422e6f7148fa1efa0eac1423ab5594b223d93b $
docker version
Client: Docker Engine - Community
Version: 19.03.8
API version: 1.40
Go version: go1.12.17
Git commit: afacb8b7f0
Built: Wed Mar 11 01:27:05 2020
OS/Arch: linux/amd64
Experimental: false
所以,这是由于 LDFLAGS
和执行 go build
时使用的 -w
标志的存在。
我正在尝试使用 dlv
调试器来理解 dockerd
中的某些内容。不幸的是,每次我尝试这样做时都会遇到错误。我做不到 dlv exec
也做不到 dlv attach
。
以下差异显示了我对 docker/docker
应用的一些更改,以确保避免某些 go 优化并可以进行调试:
diff --git i/hack/make/.binary w/hack/make/.binary
index d56e3f3..e6835fa 100644
--- i/hack/make/.binary
+++ w/hack/make/.binary
@@ -84,6 +84,7 @@ hash_files() {
go build \
-o "$DEST/$BINARY_FULLNAME" \
"${BUILDFLAGS[@]}" \
+ -gcflags="all=-N -l" \
-ldflags "
$LDFLAGS
$LDFLAGS_STATIC_DOCKER
我还修改了 dockerd-rootless.sh
以确保我不使用普通的 exec
,而是 dlv exec dockerd -- $@
。不幸的是,每次我收到以下错误:
Could not create config directory: mkdir /root/.config: permission denied.could not launch process: could not get .debug_frame section: could not find .debug_frame section
当我尝试 dlv attach docker-pid
:
could not attach to pid 228089: could not get .debug_frame section: could not find .debug_frame section
有人知道是什么原因造成的吗?
信息:
uname -a
Linux host 5.6.8-200.fc31.x86_64 #1 SMP Wed Apr 29 19:10:01 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
go version
go version go1.13.10 linux/amd64
dlv version
Delve Debugger
Version: 1.4.0
Build: $Id: 67422e6f7148fa1efa0eac1423ab5594b223d93b $
docker version
Client: Docker Engine - Community
Version: 19.03.8
API version: 1.40
Go version: go1.12.17
Git commit: afacb8b7f0
Built: Wed Mar 11 01:27:05 2020
OS/Arch: linux/amd64
Experimental: false
所以,这是由于 LDFLAGS
和执行 go build
时使用的 -w
标志的存在。