• 如何使用Goland进行远程Go项目线上调试?


     介绍

    有时候本地环境很难实现“完整的线上环境”的现场,怎么使用goland这个“go语言最强IDE”进行远程线上进行Debug呢?这里将给你答案。

    实现步骤

    准备工作

    1.  生产环境的可以跑go项目的机器(远程机)
    2. Goland
    3. dlv 工具

    操作过程

    1. 将你编译好的go语言二进制文件上传到远程机

    CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build cmd/myproject.go 

    将项目编译出linux的二进制文件: myproject

    你可以通过scp将你的文件上传到远程机

    scp -i  <二进制文件> <远程机hostname>@<远程机ip>:<远程机存放二进制文件的路径>

    比如: 

     scp  -i ~/work/share/sshkey/mykey.sshkey  ./myproject  centos@my-node:/home/myfold/myproject

     

    远程机要能够运行go语言项目,需要安装go编译器,如何在linux安装go 编译器,如果是ubuntu系统可以参考:

    How to install Go [golang] on Ubuntu Linux

    2. 在远程机器上本地安装dlv 工具

    dlv的官方地址可以参考:全球最大同性交友网站的github

    具体过程为:

    1. $ git clone https://github.com/go-delve/delve
    2. $ cd delve
    3. $ go install github.com/go-delve/delve/cmd/dlv

    golang 1.16或者后面版本可以参考:

    1. # Install the latest release:
    2. $ go install github.com/go-delve/delve/cmd/dlv@latest
    3. # Install at tree head:
    4. $ go install github.com/go-delve/delve/cmd/dlv@master
    5. # Install at a specific version or pseudo-version:
    6. $ go install github.com/go-delve/delve/cmd/dlv@v1.7.3
    7. $ go install github.com/go-delve/delve/cmd/dlv@v1.7.4-0.20211208103735-2f13672765fe

    3. 在远程机上运行golang项目

    - 将golang二进制在远程机上运行。

    ~/go/bin/dlv --listen=:2345 --headless=true --api-version=2 exec ./myproject 

    我们可以发现,远程机的dlv工具(服务端)使用2345 端口为提供一个用于远程myproject 的服务,用于本地dlv(客户端)的连接。

     4. 本地使用tunnel 代理连接远程机器连接 (如果不需要代理,可以忽略这一步)

    本地的tunnel可以使用ssh 来完成:

    ssh -L 2345:<远程代理的机器>:2345 -N -i ~/.ssh/sshkey <远程机hostname>@<远程机ip>

    这样一来,本地就可以用2345端口连接跟远程机器的23452345端口联通。

    5. 本地配置goland 实现远程线上debug

    打开goland (mac 版本):

    goland- > Run -> edit Configurations... -> 新增一个run 配置 ;

    然后使用本地的2345 端口来进行debug。(由于你使用代理或者直接连接2345来连接远程机的2345端口,所以你要配置这个端口来进行)

     

    然后就可以在本地goland 设置断点,然后点击debug进行在线debug了。

    注意:

    本地的代码必须和远程机上的go程序二进制完全相同。如果本地代码变动了,必须再重新编译一个新的二进制代码到远程机上,二者必须实时相同。

  • 相关阅读:
    神经网络控制与matlab仿真,matlab神经网络拟合预测
    vue项目首屏加载优化--gzip
    【走进RDS】之 SQL Server 性能诊断案例分析
    【Ingress】
    Leetcode笔记——二叉树的迭代遍历
    从程序员成长为500强企业的架构师,如何掌控自己的职业生涯?
    Python多线程与GIL锁
    区块链(3):区块链去中心化
    12JVM基础
    UDS02-根据标识符读取数据服务【ServiceID = 0x22】
  • 原文地址:https://blog.csdn.net/weixin_38976558/article/details/127798045