【研发效率提升】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