ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

golang remote debug和docker debug

2019-08-30 12:53:19  阅读:301  来源: 互联网

标签:代码 golang Go Goland debug delve docker 调试


在编写 Go 代码的时候,因为很多时候都是需要调试服务器上的代码的,作为一个年长的工程师,肯定不能用 log.Printf 来调试问题,所以我选择了 delve 这个工具,通过 delve 我可以像本地调试代码一样在 Goland 中调试 Go 代码,很是惬意。如果要说缺点的话,那就是在服务端启动 delve 的 server 端之后,必须在一定时间内(不知道具体多久)连接上它,不然会关闭;同时,在我断开调试之后,server 会自动关闭,如果我要再次调试,那就必须再运行一次 server(当然,可以通过不关闭 debug 解决,就是不太友好)。

具体使用 delve 调试还是比较简单的,只需要两步:

第一步:在服务器上运行 delve 服务器

运行 delve 服务器有几种形式,可以是用 delve 运行 Go 代码,也可以是运行可执行程序,也可以是侵入一个运行中的 Go 程序,一般来说,attach 一个运行中的 Go 程序比较常见:

[root@liqiang.io] dlv attach $PID --headless --api-version=2 --log --listen=:1234

这样 delve 服务器就起来了,然后继续下一步就是 Goland 连接调试。

第二步:在 Goland 中连接 delve 服务器

直接在 Goland 中配置 Host 和 Port 即可,然后在源代码中选择这个 “Go Remote” 调试器进行调试:

注意点:

  • Go 代码需要加上编译选项: -gcflags='all=-N -l',这个 Goland 也会提示你;
  • 不一定要用 Goland 调试,你也可以在本地执行 delve connect 来连接调试。

 

 

有时候我么需要远程调试golang程序,比如我们在macos写的代码,但是有时在linux上运行的,所以我们需要远程调试运行在linux系统的代码。另外一种情况是我们可以把goalng打包到docker 镜像中,代码跑在容器中同样可以调试。以goland为例。

remote debug

远程调试golang代码需要在运行代码的远程机器上按照delve,然后以delve运行要调试的程序。

  • 编译
   export CGO_ENABLED=0 GOOS=linux GOARCH=amd64
   go build -gcflags='all -N -l' main.go
  • install delve
   go get go get -u github.com/derekparker/delve/cmd/dlv 
  • delve 运行程序
 dlv --listen=:2345 --headless=true --api-version=2 exec ./main
  • goland 设置remote debug
    host为远程主机ip 端口是刚才dlv设置的端口


      屏幕快照 2018-07-03 下午3.57.11.png
  • debug
    然后就像调试本地代码一样调试远程主机上的程序

docker debug

标签:代码,golang,Go,Goland,debug,delve,docker,调试
来源: https://www.cnblogs.com/ExMan/p/11434389.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有