MindCloud调试工具

发布时间 2023-12-02 14:26:25作者: 易先讯

一、工具介绍

MindCloud调试工具,单一二进制,无其它环境依赖。

该工具主要功能包括:

  • 远程断点调试容器
  • 挂载主机路径(挂载nginx配置,在主机路径上修改该文件可以使修改持久化)
  • 新增端口映射(pprof等工具需要端口映射才能访问)

链接

工具默认使用环境上MEFCenter安装目录的容器yaml作为输入。使用参数(-mef_idr=-)可使用标准输入

二、远程断点调试容器

调试工具使用dlv(地址)进行断点调试。实现原理是通过挂载dlv和带符号表的二进制到容器,修改启动命令并创建端口映射,使得开发者通过网络连接远程机器上的容器,实现断点调试。

使用指导

1、获取dlv,编译调试二进制

断点调试需要编译时保留符号表,编译命令实例如下

 
1
go build -o edge-manager --gcflags="-N -l" main.go
2、将dlv,调试二进制上传到执行环境的同一个目录,并上传调试工具

需要确保dlv,edge-manager在容器内有执行权限

0cdac0b3e16ad6f19b06e48699ff3477_572x90.jpg@900-0-90-f.jpg

3、修改容器配置,启动dlv

如下命令可以生成dlv调试配置yaml

 
1
./center_debug_tool -m edge-manager -d -debug_port 30099 -debug_dir /root/debug

或者直接使用如下命令使得配置生效

 
1
./center_debug_tool -m edge-manager -d -debug_port 30099 -debug_dir /root/debug | kubectl apply -f -

该配置在MindCloud重启后会被重启,如果想在重启MEFCenter之后继续生效请将上述命令输出重定向到{安装路径}/mind-cloud/images/{component}/image-config/{component}.yaml

最后确认一下容器是否正常启动

4bebb1accbdd6b693325422837b130f3_720x250.jpg@900-0-90-f.jpg

4、在GOLAND 上配置调试

配置

80b70e93197dd5c8e348578604f86678_1047x311.png@900-0-90-f.png

连接远程dlv

5b102c71d7fb1499c3011ecf5ca91395_778x430.png@900-0-90-f.png

打个断点,触发调用,能够看到作用域内所有的变量

0e7b8853dedf4cb4e0c06c8281cc4161_756x350.jpg@900-0-90-f.jpg

三、挂载主机路径

示例:

主机路径下添加如下文件

 
1
echo 123 > /root/debug/hello

挂载

 
1
./center_debug_tool -m nginx-manager -v /root/debug/hello:/home/MEFCenter/hello | kubectl apply -f -

测试

 
1
docker exec -it $(docker ps -a | grep k8s_ascend-nginx-manager | awk -F' ' '{print $1}') cat /home/MEFCenter/hello

输出:123,我们的文件已成功挂载

四、端口映射

示例:

在容器中提供pprof接口时,需要配置端口映射外部才能外部访问

 
1
func main() {
2
go func() {
3
engine := gin.New()
4
pprof.Register(engine)
5
if err := engine.Run(":9090"); err != nil {
6
panic(err)
7
}
8
}()
9
 
10
...
11
}
 
1
./center_debug_tool -m edge-manager -p 30099:9090 -v /root/debug/edge-manager:/home/MEFCenter/edge-manager | kubectl apply -f -

外部可以访问到容器内的pporf服务

ad4e49729a41c9798a237eba84a3cd59_580x422.png@900-0-90-f.png

参考链接: