【研发效率提升】goland+dlv远程调试

工欲善其事,必先利其器。好的工具可以更快更精准完成工作,提高做事的愉悦程度,甚至给人启发。本文讲述如何用goland配合dlv调试远程的go程序。vscode有类似的方式,可以结合本文后自行查阅资料。

很多时候我们喜欢用自己已知的知识去解决问题,就好像是有一个锤子,看什么都是钉子的思维一样。类似于打印日志去调试就是非常笨的方式,时间一长整个人都不好了。跳出自己的舒适区主动去学习成长,才能打破自身的限制。用方法,提高效率去解决问题,而不是靠时间感动自己。越卷只能越菜。

为什么需要远程调试

本地机器配置跟不上,调试起来太卡远程服务器(研发云,sim环境)有更加完备的上下游环境、配置文件、硬件(例如GPU)、特殊的依赖库(linux与windows)需要在特定环境复现问题

远程调试的优势

可视化调试界面,减少心智负担本地机器负载小调试时间更快,减少繁琐的打印日志定位问题的方式心情愉悦

远程调试有两个方面,如何将本地编辑的代码保存到远端,如何在本地调试远程程序。

代码同步方式

通过git仓库同步goland提供了sftp同步本地文件到远程服务器的方式,简单的项目可以应用,但是复杂的项目不好用用vscode 的remote sshgoland最新版本(2021.3)支持Remote Development,目标是编辑远端go代码,就像操作本地代码一样(有完整的索引跳转支持),目前试用效果比较强大

调试远程程序

服务器安装dlv

注意安装的delve 需要和使用的go版本匹配,最新的delve建议使用go1.16以上

安装后所在目录:

plutus需要安装redis

编译(go1.10以上)

-N 禁止编译器优化

-l 禁止内联

服务器端程序运行

(option)dlv支持两种启动方式,一种是直接用dlv启动go服务进程,另外一种是将dlv server attach到已经运行的go服务进程上。例如sim环境下程序已经启动,

本地goland配置

注意保证服务器和客户端的代码一致!

右上角edit Configurations

+ → Go Remote → 添加ip地址与端口

调试

调用远程服务接口,并在本地合适的地方打上断点,和goland调试本地代码一样。

参考资料

https://github.com/go-delve/delve/tree/master/Documentation/installation

https://blog.jetbrains.com/go/2019/02/06/debugging-with-goland-getting-started/

https://www.jetbrains.com/help/idea/2021.3/remote-development-a.html