You are viewing an old version of this page. View the current version.
Compare with Current View Page History
« Previous Version 2 Current »
通过goland的remote debug功能可以实现很方便的远程调试。我这里以远程调试Kubernetes集群中的golang程序为示例演示如何使用goland的remote debug功能。
goland
remote debug
Kubernetes
golang
是的,你没猜错,这个玩意是拿来远程交互debug工作的:https://github.com/go-delve/delve
debug
通过手动编译安装,命令如下,注意这和官方提供的命令有出入,以我的为准:
git clone https://github.com/go-delve/delve cd delve/cmd/dlv CGO_ENABLED=0 go build -o dlv main.go # 拷贝工具到容器 kubectl cp ./dlv khaos/khaos-guardian-x7j9t:/app/ -c metrics-agent
需要添加-gcflags参数,给编译器传递-N -l参数,禁止编译器优化和内联:
-gcflags
-N -l
CGO_ENABLED=0 go build -gcflags "all=-N -l" main.go # 拷贝程序到容器 kubectl cp ./main khaos/khaos-guardian-x7j9t:/app/ -c metrics-agent
使用dlv工具执行程序的语法如下:
dlv
dlv --listen=:2345 --headless=true --api-version=2 --accept-multiclient exec ./demo
如果程序需要运行参数,那么需要加上--,例如:
--
dlv --listen=:2345 --headless=true --api-version=2 --accept-multiclient exec ./demo -- --c=/config # 等同于 ./demo --c=/config
因此我的程序的执行命令如下:
./dlv --listen=:2345 --headless=true --api-version=2 --accept-multiclient exec ./main -- --debug=true --address=:13047 --nodeIP=21.0.44.12 --rootPath=/khaos/root --agentConfigFilePath=/var/run/khaos-guardian/metricsconfig/config.yaml --kubeStateUrl=http://127.0.0.1:13043/metrics --enabledPlugins=.+
使用kubectl的port-forward命令:
kubectl
port-forward
kubectl -n khaos port-forward pod/khaos-guardian-8p2gx 2345:2345 --address 0.0.0.0
增加Go Remote配置即可。可以看到,这里的IDE也有提示如何开启远程调试的步骤。
Go Remote
IDE