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 条评论

发表回复

您的电子邮箱地址不会被公开。