使用的是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
- 先把代码上传到远程服务器,
- 然后在远程服务器上编译
go build -gcflags "all=-N -l" -o cmd/cron_server/main cmd/cron_server/main.go - 然后在远程服务器上执行
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 - 在本地ideal上,单步执行
交叉编译
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。
查找方法:
- 如果你是在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
当然,一般情况下,出了问题,debug已经不能用了,所以,可以使用暴力搜索
sudo find / -name dlv
然后在结果中找到具有以下这种特征的路径:/Users/yanhui/Library/Application Support/JetBrains/IntelliJIdea2023.1/plugins/go-plugin/lib/dlv/mac/dlv
dlv版本替换
- 可以将你使用 go install 安装的二进制文件dlv直接替换到idea使用的dlv二进制文件。
- 如果你使用的是24版的idea,先将idea下面的dlv 改个名字,然后利用idea debug时候的报错提示,方法是
help -》Edit Custom Properties...
dlv.path=/Users/yanhui/dev/go/bin/dlv
ps: 格式比较重要,别弄错了。
然后重启idea就搞定了。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。