goland远程调试实践


配置虚拟机

安装golang编译环境

安装dlv

官方地址:https://github.com/go-delve/delve 根据官方指导下载即可

手动运行

goland的调试下拉框有个“Edit Confignations” 点开,弹窗点击“+”号按钮,选“Go Remote”,显示如下对话框

Host填写远程服务器的ip或域名等;

Port为dlv的--listen参数的端口.

编译参数

根据上面图片的提示,有两种运行程序的方法。

第一 直接让dlv编译并运行程序

dlv debug --headless --listen=:2345 --api-version=2 --accept-multiclient

第二 手动编译并执行

在服务器上编译程序,必须添加-gcflags参数,给编译器传递-N -l参数,禁止编译器优化和内联

go build -gcflags "all=-N -l" github.com/app/demo

然后,使用dlv运行编译好的程序

dlv --listen=:2345 --headless=true --api-version=2 --accept-multiclient exec ./demo

如果要给程序传递参数则需要再命令末尾追加“--”,如下面代码所示

dlv --listen=:2345 --headless=true --api-version=2 --accept-multiclient exec ./demo -- command1 --param1=val1

手动运行方式总结

这种方式虽然看起来很复杂,但是实际开发中可能会比较灵活,比如,我们可能是配置了一个虚拟机来模拟实际的运行环境,这样可以通过共享目录的方式将代码输出到虚拟机环境,只需执行一个命令即可开始调试。

Goland自动build并编译

其实go build的功能有个选项可以支持远程编译,经过测试有个问题,在设置的远程服务器目录中,会创建很多临时目录并且编译的结果也会放在临时目录中,如果需要依赖某些配置文件则不方便使用。这时候如果程序的配置等参数,可通过命令行参数传入,就比较好用了。

Archives