目录
dlv源码下载及编译
源码下载:https://github.com/derekparker/delve
aarch64平台交叉编译dlv:
# cd delve/cmd/dlv/
# CGO_ENABLED=1 CC=aarch64-linux-gnu-gcc CXX=aarch64-linux-gnu-g++ GOOS=linux GOARCH=arm64 go build
dlv使用
https://zhuanlan.zhihu.com/p/655096453
https://www.cnblogs.com/cqx6388/p/17560208.html
https://blog.csdn.net/kentzhang_/article/details/84925878
1)首先运行dlv,监视调试端口:
./dlv --listen=:2345 --headless=true --api-version=2 --accept-multiclient --check-go-version=true exec ./bmc-server
如果进程已经存在:
./dlv --listen=:2345 attach 497783 --headless=true --api-version=2 --accept-multiclient --check-go-version=true -- -bmc http://127.0.0.1
2)然后在Goland里建立远程调试
注意事项:
1)--
给调试文件添加参数
2)编译调试文件时要添加参数-gcflags "all=-N -l"
,保留程序的调试信息。
3) 程序已经跑起来,可以使用attach来调试,避免重复启动程序浪费时间。
4)dlv命令进程无法使用ctrl+c强制kill掉,需要通过pkill dlv杀死。
遇到问题
- 无法debug打断点
其实在执行dlv时就已经报错了:
root@linaro-alip:/opt/live-server# ./dlv --listen=:2345 --headless=true --api-version=2 --accept-multiclient --check-go-version=true exec ./live-server -- -bmc http://127.0.0.1
API server listening at: [::]:2345
Version of Delve is too old for this version of Go (maximum supported version 1.14, suppress this error with --check-go-version=false)
这里不要强制将--check-go-version=false
改为true了,因为正是这个原因导致上面的问题。原因提示已经很明显,dlv的版本太旧。
解决方案:
再去看dlv在github的项目,默认是master分支,版本最新提1.4.0,使用它最新v1.20.2分支编译即可。
0 条评论