使用的是Intellij IDEA,go语言。
一,配置本地代码跟远程服务器间同步,
参考:https://blog.csdn.net/Cosmoshhhyyy/article/details/138108752
二,使用dlv进行远程调试。
参考:https://luckymrwang.github.io/2021/07/16/%E4%BD%BF%E7%94%A8-d...
其中在服务器上执行go程序的时候报了dlv跟go版本不兼容的错误,go使用的是
go version go1.20.13
然后讲dlv降到 v1.20.2 版本,重新安装dlv就可以了。

ps: Version of Delve is too old for Go version 1.21.13

解法:

dlv version

安装或升级 Delve

使用 go install 命令安装或升级到最新版本的 Delve:
go install github.com/go-delve/delve/cmd/dlv@latest

  1. 先把代码上传到远程服务器,
  2. 然后在远程服务器上编译
    go build -gcflags "all=-N -l" -o cmd/cron_server/main cmd/cron_server/main.go
  3. 然后在远程服务器上执行
    dlv --listen=:2345 --headless=true --api-version=2 --accept-multiclient exec ./produce-test -- --topic=benchmark-queue-1 --endpoint=10.3.236.28:8081 --count=1
    dlv --listen=:2345 --headless=true --api-version=2 --accept-multiclient exec ./main arrear_advance_notify -- --consul-addr=10.10.100.2:30018 --consul-key=/app/dev/cron_module
  4. 在本地ideal上,单步执行
    image.png

交叉编译

GOOS=linux GOARCH=amd64 go build -o produce-test main.go

解释 GOARCH 和 GOOS

GOARCH: 表示目标架构(例如 amd64, arm, arm64 等)。这指的是您想要编译的程序最终将运行在的平台架构。
GOOS: 表示目标操作系统(例如 linux, darwin, windows 等)。这指的是您想要编译的程序将运行的操作系统。

dlv版本问题。

这次debug的时候,又遇到了dlv跟go版本不兼容问题:

error layer=debugger could not patch runtime.mallogc: no type entry found, use 'types' for a list of valid types
WARNING: undefined behavior - version of Delve is too old for Go version 1.22.9 (maximum supported version 1.20)
9
Exiting.

Debugger finished with the exit code 0

我用的是mac本,IntelliJIdea 编辑器,在idea的terminal下,使用

go install github.com/go-delve/delve/cmd/dlv@latest

安装成功,并且,

❯ dlv version
Delve Debugger
Version: 1.24.0
Build: $Id: 2d55e4d30150e3fc68e64357e21293d7920fc1f1 $

检查已经升级到了最新的24年版本,可是debug依然不行。
原因是,使用 go install 安装到的是 GOPATH下的目录,但是idea debug的时候,使用的是自己指定路径下的dlv。
查找方法:

  1. 如果你是在debug模式下,使用ps命令,
❯ ps -ef|grep dlv
  501 44839 44144   0  3:27下午 ??         0:01.95 /Users/yanhui/Library/Application Support/JetBrains/IntelliJIdea2024.3/plugins/go-plugin/lib/dlv/mac/dlv --listen=127.0.0.1:60811 --headless=true --api-version=2 --check-go-version=false --only-same-user=false exec /Users/yanhui/Library/Caches/JetBrains/IntelliJIdea2024.3/tmp/GoLand/___go_build_test_test25 --

可以看到idea内部使用的是 /Users/yanhui/Library/Application Support/JetBrains/IntelliJIdea2024.3/plugins/go-plugin/lib/dlv/mac/dlv 路径下的可执行文件,可以使用以下命令查看该版本号

❯ /Users/yanhui/Library/Application\ Support/JetBrains/IntelliJIdea2024.3/plugins/go-plugin/lib/dlv/mac/dlv version
Delve Debugger
Version: 1.23.0
Build: 059f149433c15277b956e3a26a5a34e504812e06
  1. 当然,一般情况下,出了问题,debug已经不能用了,所以,可以使用暴力搜索
    sudo find / -name dlv
    然后在结果中找到具有以下这种特征的路径:

    /Users/yanhui/Library/Application Support/JetBrains/IntelliJIdea2023.1/plugins/go-plugin/lib/dlv/mac/dlv

dlv版本替换

  1. 可以将你使用 go install 安装的二进制文件dlv直接替换到idea使用的dlv二进制文件。
    image.png
  2. 如果你使用的是24版的idea,先将idea下面的dlv 改个名字,然后利用idea debug时候的报错提示,方法是

image.png
help -》Edit Custom Properties...

image.png

dlv.path=/Users/yanhui/dev/go/bin/dlv
ps: 格式比较重要,别弄错了。

然后重启idea就搞定了。


英雄之旅
8 声望1 粉丝