secretflow/kuscia 远程调试教程(dlv工具)

目录

概要

调整deploy脚本。

容器里安装go环境和dlv工具

手动安装

自动安装

监听主进程

小结


概要

        上一篇文章介绍了如何启动kuscia的master节点,本来想立马出一起lite节点的教程,并教大家如何本地跑个案例的,但是过程中又一些问题,小白又解决起来很困难,正好过程中一起研究的小伙伴摸索出了一下debug的方法(感谢大佬),就来和大家分享一下。

        这个debug的方法是借助了 共语言的调试工具 dlv。

        提前说明这个方法用到了idea,其他ide能不能用这种方法debug不能保证呀

        演示用的kuscia分支版本是   (v0.3.0b0  和官方提供的mvp包的版本一致),v0.4.0b0版本有大量改动,以及代码的重构

调整deploy脚本。

        目标是 以  privileged   特权模式启动 容器,并暴露debug的端口

        我们找到   /kuscia/scripts/deploy     目录下的 deploy.sh   脚本,打开它,找到这个方法

function deploy_master() {

....(这里就不全部复制了,太多了)

}

        然后找到这一个指令,,也就是启动容器的指令(不同版本这个指令可能有所不同

docker run -dit --name="${domain_ctr}" --hostname="${domain_ctr}" --restart=always --network=${NETWORK_NAME} -m ${MASTER_MEMORY_LIMIT} \
      --env NAMESPACE=${master_domain_id} \
      -p "${DOMAIN_HOST_PORT}":1080 \
      -p "${KUSCIAAPI_HTTP_PORT}":8082 \
      -p "${KUSCIAAPI_GRPC_PORT}":8083 \
      ${env_flag} ${mount_flag} \
      "${KUSCIA_IMAGE}" scripts/deploy/start_master.sh ${master_domain_id}

我们往这个指令加两部分

第一个是:  --privileged   标识以特权模式启动容器

第二个是:   -p  "${debug端口}"   记住这个端口,后面要用

如下:

docker run -dit --privileged --name="${domain_ctr}" --hostname="${domain_ctr}" --restart=always --network=${NETWORK_NAME} -m ${MASTER_MEMORY_LIMIT} \
      --env NAMESPACE=${master_domain_id} \
      -p "${DOMAIN_HOST_PORT}":1080 \
      -p "${KUSCIAAPI_HTTP_PORT}":8082 \
      -p "${KUSCIAAPI_GRPC_PORT}":8083 \
      -p "2345":2345 \
      ${env_flag} ${mount_flag} \
      "${KUSCIA_IMAGE}" scripts/deploy/start_master.sh ${master_domain_id}

容器里安装go环境和dlv工具

  这里有两种方式,一个是容器启动后直接进入docker容器,在容器里面直接下载安装一个是加在dockerfile里面,让它创建容器的时候就去下载安装,两种我都会提及,区别不是很大。

手动安装

    执行

docker ps   

    查看所有的容器,运行以下指令进入容器(master节点容器名一般为   你的linux用户名+"-kuscia-master"

docker exec -it   容器id或者name    /bin/bash

  进去后,我们执行以下指令,安装go环境

#  安装go环境,dlv工具要依赖于go下载

 yum install -y go 

# 安装完执行 go version 查看是否安装成功

go version 

安装dlv工具

# 设置代理

go env -w GO111MODULE=on


go env -w GOPROXY=https://goproxy.cn,direct


# 下载dlv 工具

go install github.com/go-delve/delve/cmd/dlv@latest


# 执行一下指令,查看是否安装成功
/root/go/bin/dlv version

自动安装

  我们找到这个目录下的dockerfile: /kuscia/build/dockerfile/kuscia-anolis.Dockerfile

我们往里面加入这些代码,让他在创建容器的时候就把需要的环境安装好

RUN yum install -y go && \
    yum clean all && \
    go env -w GO111MODULE=on && \
    go env -w GOPROXY=https://goproxy.cn,direct && \
    go install github.com/go-delve/delve/cmd/dlv@latest

把这段代码加到   kuscia-anolis.Dockerfile   这个dockerfile里面,

        然后再kuscia的项目根目录下重新执行以下指令:

# 重新打镜像

make  image


# 重新创建容器

./scripts/deploy/deploy.sh master -i 1.1.1.1 -p 1080 -k 8082 -g 8083

监听主进程

        安装成功dlv之后,我们执行以下指令

ps -ef | grep -v "air" | grep -v "/bin/sh"

找到kuscia的主进程id:

  主进程应该是  /hom/kuscia/bin/kuscia  master  这个  。。。。复制它的pid,然后我们执行这个指令:

/root/go/bin/dlv attach ${主进程PID} --headless --listen=:${准备的debug端口} --api-version=2 --accept-multiclient

出现如下输出则说明监听成功了

然后我们打开idea,创建一个 go Remote:端口选择刚刚用的debug端口,,host根据情况选择,如果是本机的话,直接localhost

  然后连接,这样就可以debug了,,,如果要里面看看有没有连接成功,去  monitor.go里面打几个断点即可,这里面有一些类似探活的操作,会定时自动触发。

小结

这就是如何debug的全部内容了,如果有什么错误欢迎大家指正,共勉!

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值