任何一门语言,调试器对于开发来说都非常重要,在我从Go语言社区中瞎逛了一遍,才发现原来Go官方没有实现调试器,而且社区里竟然使用Print的方式来打印调试,想想,这很不科学。于是,继续找了找,才发现一个比较好的方案,那就是dlv(https://github.com/derekparker/delve)。
Dlv,也称为Delve是Go语言的源码调试工具,由derekparker开发,开源于Github。在Mac上配置Go语言开发环境的时候,经常碰到的问题就是Dlv调用总是不成功,无法启动应用,无法调试等等,大部分的问题都与Mac的安全机制有关。
Mac上使用codesign对应用进行签名,没有签名的程序会受到一些限制,例如无法作为调试程序。当然如果为了方便,你可以通过Homebrew安装Homebrew编译好的Dlv。
由于我深度使用vscode,所以我的调试器主要是为了配置vscode,配置起来不复杂只是比较麻烦。
{
"version": "0.2.0",
"configurations": [
{
"name": "Launch",
"type": "go",
"request": "launch",
"mode": "debug",
"remotePath": "",
"port": 2345,
"host": "127.0.0.1",
"program": "${fileDirname}",
"env": {},
"args": [],
"showLog": true
}
]
}
先在vscode的市场里找到Go:Rich Go language support for Visual Studio Code,安装完成。
然后在你的项目中,安装dlv
go get -u github.com/derekparker/delve/cmd/dlv
你可以输入go env,先查询一下go的环境配置,主要是GOPATH这一项,如果你没有配置GOPATH,在启动调试器时,会出现如下的报错信息:
Failed to continue: "Cannot find Delve debugger. Install from https://github.com/derekparker/delve & ensure it is in your "GOPATH/bin" or "PATH"."
由于我使用的是zsh,所以我在.zshrc文件中配置GOPATH
export GOPATH="$HOME/go" export PATH="$HOME/go/bin:$PATH"
接着使用xcode-select --install把一些命令行工具安装上,如果安装完成之后,启动调试器,报如下的错误:
could not launch process: EOF
这个时候,说明你安装Command line tools版本太高了,目前dlv还不支持。只能将它删除了,然后在苹果的官网上下载老版本的Command line tools,重新安装即可。
运行 $ sudo rm -rf /Library/Developer/CommandLineTools,然后去
https://developer.apple.com/download/more/ 上下载Command Line Tools (macOS 10.13) for Xcode 9.2 - Dec 4, 2017。
整个调试的事情,花了我大概三个小时,其实细心下来一个一个解决,还是蛮快的,主要利用Google和Github issues,毕竟已经有很多开发者遇到了相同的问题。