Notice:因为美国大选,博客好久没更新了。(有什么关系吗?...)
之前有一篇博客《Mac安装GDB》里面介绍过如何在Mac上面安装GDB,并调试Go程序。但是,作为一个新兴语言,GDB对于Go的支持不是非常的完善。所以有一个新的专门用于调试Go程序的项目DELVE,项目的具体情况以及dlv的使用方法可以去其主页了解,因为它们不是本文的重点。本文的重点是解决该工具在最新的Mac上不能用的问题。
如果你在Mac上使用dlv调试Go程序遇到了下面的报错:
could not launch process: could not get thread count
恭喜你,这篇文章可以帮你解决,继续往下看。
为什么会出现这个问题?
苹果公司2016年发布了一个安全更新,用于防止任意代码使用root权限去执行,然后dlv就不能用了。而且苹果也没有打算做到前向兼容。唉,Apple永远是那么傲娇...
解决方案
如果你没有为你的dlv做过签名,那请按照下面的步骤先做签名,如果已经做过了,请直接看后面。签名步骤:
- 打开 “Keychain Access” (/Applications/Utilities/Keychain Access.app)
- 打开菜单/Keychain Access/Certificate Assistant/Create a Certificate...
- "Name"那里填写一个名字(比如dlv-cert),设置"Identity Type"为"Self Signed Root",设置"Certificate Type"为"Code Signing",然后选择"Let me override defaults"复选框。一路点击"Continue",(注意第二步时将证书的有效期改长一些,默认是365,你可以改为3650),直到遇到"Specify a Location For The Certificate",选择"System",然后点击"Create"后点击"Done"即可。
以上便完成了自签名证书的创建。
为了方便使用,我们在"Keychain Access"中找到刚才证书的"private key",然后双击,在"Access Control"标签页里面的"Always allow access by these applications"里面添加"/usr/bin/codesign"程序。Mac的Finder里面默认不显示/usr目录,使用快捷键command+shift+G
可直接输入路径。
OK,万事具备,只欠东风了。然后执行下面的命令:
git clone https://github.com/bx-zhanjh/delve.git $GOPATH/src/github.com/derekparker/delve
cd $GOPATH/src/github.com/derekparker/delve
git checkout origin/new_fork_exec
CERT=dlv-cert make install
OK,这样你就可以使用dlv了。
当然,如果你使用了IDE,而且你的IDE也使用的是dlv的话,还需要把IDE里面自带的dlv替换成你编译的这个版本。比如我使用的是IntelliJ IDEA 2016.2,那我需要删除它自带的dlv,替换成你编译出来的dlv:
mv ~/Library/Application\ Support/IntelliJIdea2016.2/Go/lib/dlv/mac/dlv ~/Library/Application\ Support/IntelliJIdea2016.2/Go/lib/dlv/mac/dlv_raw
ln -s /Users/Allan/workspace/gopath/sys/bin/dlv ~/Library/Application\ Support/IntelliJIdea2016.2/Go/lib/dlv/mac/
本文参考自:https://github.com/derekparker/delve/issues/645
最新解决方案
brew install go-delve/delve/delve --HEAD
将安装后的/usr/local/bin/dlv
命令替换掉你的IDE里面的dlv即可。
CERT=dlv-cert.key make install [6bff4d1]
go install -ldflags="-s -X main.Build=6bff4d19706b46b7bd350212048e4a140caad271" github.com/derekparker/delve/cmd/dlv
codesign -s "dlv-cert.key" /bin/dlv
/bin/dlv: No such file or directory
make: * [install] Error 1
我也遇到这个问题 请问解决了吗 如何解决?
使用正常的用户安装报错:
Error: Could not create /usr/local/Cellar
Check you have permission to write to /usr/local
使用 root 用户安装报错:
Error: Running Homebrew as root is extremely dangerous and no longer supported.
As Homebrew does not drop privileges on installation you would be giving all
build scripts full access to your system.
博主现在的解决方案是什么?
sudo chown root:wheel /usr/local/bin/brew 试试
最新的解决方案不可以用呀,使用 brew 现在是不允许作为 root 权限运行,不使用 root 权限又会报权限禁止的错误
没有解决问题 tl:delve tianlei$ CERT=dlv-cert make install
go install -ldflags="-s -X main.Build=39f4d937a46782460eb978c98f2ece07cb2df9c2" github.com/derekparker/delve/cmd/dlv
codesign -s "dlv-cert" /Users/tianlei/myGolang/bin/dlv
dlv-cert: ambiguous (matches "dlv-cert" in /Users/tianlei/Library/Keychains/login.keychain-db and "dlv-cert" in /Library/Keychains/System.keychain)
make: * [install] Error 1
看错误应该是你的证书生成的有问题,你参看下官方的wiki重新生成一下证书试试:https://github.com/derekparker/delve/wiki/Installation-on-OSX
能加下qq吗:4402935 我根据你的方法还是没有成功呢
你是按照我最新更新的方法吗?dlv version和type dlv看下输出。原来的方法编译的dlv在GOBIN下,brew安装的/usr/local/bin下面。所以PATH的顺序要注意下,以及软连接要做正确。要链接到/usr/local/bin下的dlv。