前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Go远程调试方案

Go远程调试方案

原创
作者头像
liliane
修改2024-09-04 11:48:27
1670
修改2024-09-04 11:48:27
举报
文章被收录于专栏:liliane随笔

前言

本文将对远程调试这个日常开发问题,进行一些方法上的梳理,涉及语言包括golang、python。

为什么

为什么需要远程调试?在公司内开发,往往需要依赖到公司的内部组件,例如mysql、redis、es等等,这些数据数据敏感,一般不开放外网甚至办公网的访问权限,因此,我们开发自测阶段,就无法连上组件进行调试。一般公司会提供可访问内网的云开发机,这种情况下,一般的开发模式就有:1. 直接通过终端工具,连接云开发机,使用vim等编辑器开发、自测;2. 通过vscode等客户端,ssh 打开远程开发机上的代码,进行开发、测试。vim+插件工具使用得非常顺手的同学一般会使用方式1,对于不熟练vim的同学,就比痛苦。方式2,本地IDE开发,可以使用IDE提供的各种高级功能,如 rebuild 等功能,比较方便,是大部分开发者首选。但这两种方式,都无法使用 debug 工具定位代码问题。

因此,这里介绍第三种方法:远程调试,在本地和远程开发机都拉取一份代码,编辑本地代码,通过idea的代码同步工具,实时同步两边代码。调试时,启动远程代码,本地通过 Delve 工具连接远程启动进程,对代码进行控制。

最早,远程调试还是使用在排查环境(线上)问题场景中,现在已经普遍用在开发阶段。

是什么

远程调试是在本地运行调试器,通过远程调试接口,进行本地和远程的网络通信,实现本地设置断点控制远程程序,并将结果返回本地的软件技术。

怎么做

不同开发语言的远程调试工具不同,下面举例说明Golang和Python两种开发语言的配置方法。

Golang

下面介绍Goland + Delve工具的远程调试方法。

1. 远程服务器安装Delve工具,用于开启远程调试接口。

了解delve参见官网说明,这里只简单介绍安装和使用。

代码语言:txt
复制
$ git clone https://github.com/go-delve/delve
$ cd delve
$ go install github.com/go-delve/delve/cmd/dlv
$ dlv version # 查看是否安装成功

2. 本地Goland添加远程服务器的SSH配置。

File > Settings > Build, Execution, Deployment > Deployment

选择SFTP方式同步,SSH配置主机、用户名、认证方式,免密登录设置自行google。

可通过 Test Connection,测试连通性。

Root Path为远程服务根路径,结合Mappings,对齐本地和远程代码仓库路径。

Tools > Deployment > Automic Upload

至此,已经能实现了本地代码和远程代码的自动同步

3. 添加远程调试配置

Run > Edit Configurations... > + > Go Remote

4. 运行

参照上面配置提示,需要在远程服务器项目目录下,运行如下命令,默认运行当前目录下的main.go程序,也可运行其他,在后面跟上执行命令即可。

代码语言:txt
复制
dlv debug --headless --listen=:2345 --api-version=2 --accept-multiclient xxx

关于dlv命令:

详细可参考:Delve调试器

如果业务程序需要指定参数,可以在以上命令中添加 -- 参数,如:

代码语言:txt
复制
dlv debug --headless --listen=:2345 --api-version=2 --accept-multiclient -- -conf-dir ./conf -log-dir

接着,我们选择步骤3配置的Go remote Configuration,点 Debug,在Goland上打断点,即可调试程序。

Python

同理,通过 pydevd 工具配置远程调试,详情参见:python 远程调试 的方案一。

Trick

  • 配置代码同步快捷方式,因为自动同步有时间间隔,往往会出现本地更新代码未及时同步问题,可以手动在变更文件或项目根目录,通过快捷方式同步。

TODO

解决远程调试单元测试

dlv 支持 test,参见:https://github.com/go-delve/delve/blob/master/Documentation/usage/dlv_test.md:

代码语言:txt
复制
dlv test [package] -- -test.run TestSomething -test.v -other-argument

但目前看,似乎并没法像上面开启对单测的远程调试,需要进一步实践。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 为什么
  • 是什么
  • 怎么做
    • Golang
      • Python
      • Trick
      • TODO
      相关产品与服务
      远程调试
      远程调试(Remote Debugging,RD)在云端为用户提供上千台真实手机/定制机/模拟器设备,快速实现随时随地测试。运用云测技术对测试方式、操作体验进行了优化,具备多样性的测试能力,包括随时截图和记录调试日志,稳定的支持自动化测试, 设备灵活调度,用例高效执行, 快速定位产品功能和兼容性问题。云手机帮助应用、移动游戏快速发现和解决问题,节省百万硬件费用,加速敏捷研发流程。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档