当我们需要特定的运行环境才能复现某些疑难问题,通过golandremote debug功能可以实现很方便的远程调试,快速定位问题。我这里以远程调试Kubernetes集群中的golang程序为示例演示如何使用golandremote debug功能。

安装dlv工具

是的,你没猜错,这个玩意是拿来远程交互debug工作的:https://github.com/go-delve/delve

通过手动编译安装,命令如下,注意这和官方提供的命令有出入,以我的为准:

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参数,禁止编译器优化和内联:

CGO_ENABLED=0 go build -gcflags "all=-N -l" main.go

# 拷贝程序到容器
kubectl cp ./main khaos/khaos-guardian-x7j9t:/app/ -c metrics-agent

进容器执行程序

使用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=.+

 执行反向代理到dlv

使用kubectlport-forward命令:

kubectl -n khaos port-forward pod/khaos-guardian-8p2gx 2345:2345 --address 0.0.0.0

开启goland remote debug

增加Go Remote配置即可。可以看到,这里的IDE也有提示如何开启远程调试的步骤。










Content Menu

  • No labels