最近又开始了我的Go语言开发之路,开发过程中想使用Gdb调试代码,但始终因为各种报错而导致Gdb调试不了,今天晚上乘着吃了一顿烤肉的干劲,决定解决这个问题。遇见的问题主要有两个:
1. 根证书创建错误。
2. Gdb跑起来之后,会报:`During startup program terminated with signal SIGTRAP, Trace/breakpoint trap`。
根证书创建错误
MacOS系统是不容许没有许可证的进程去调试其他进程,所以需要创建一个系统的根证书,创建就创建呗,网上一搜全都是教程,这里就啰嗦了。创建过程中你极大可能会遇见这么一个问题(没遇见算你狠)
未知错误 -2,147,414,007
这是什么鬼东西,网上一搜也没有人说明这个报错的原因,但针对这个报错,可以这样解决:
在MacOSX上,lldb需要进行代码签名。调试和发布版本
使用名为的代码签名证书设置代码签名
lldb_codesign。
_
如果您还没有,则需要:
- Launch / Applications / Utilities / Keychain Access.app
_
- 在Keychain Access中选择“Keychains”中的“login”钥匙串
列表在窗口的左上角。
_
- 选择以下菜单项:
_
钥匙串访问 - >证书助理 - >创建证书......
_
- 设置以下设置
_
Name = lldb_codesign
身份类型=自签名根
证书类型=代码签名
_
- 单击继续
- 单击继续
- 单击“完成”
- 点击“我的证书”
- 双击新的lldb_codesign证书
- 调低“信任”披露三角形
_
更改:
使用此证书时:始终信任
_
- 输入您的登录密码进行确认并使其受信任
_
SnowLeopard需要接下来的步骤,但可能是因为一个bug
Keychain Access如何制作证书。
_
- 选项 - 将新的lldb_codesign证书从登录密钥链拖到
主Keychain Access窗口的Keychains窗格中的System keychain
在系统钥匙串中制作此证书的副本。你必须这样做
多次授权,在被问到时将其设置为“始终信任”。
- 切换到系统钥匙串,然后拖动lldb_codesign的副本
在那里进入桌面。
- 切换到终端,然后运行以下命令:
_
sudo security add-trust -d -r trustRoot -p basic -p codeSign -k /Library/Keychains/System.keychain~/ Desktop / lldb_codesign.cer
_
- 右键单击“系统”钥匙串中的“lldb_codesign”证书(不是
“登录”,但“系统”中的一个,并选择“删除”将其删除
“系统”钥匙串。
- 重启
根证书创建完成之后,就可以给gdb授权了,执行命令如下:
sudo killall taskgated
sudo codesign -fs gdb_codesign /usr/local/bin/gdb
Gdb调试报错
准备开始使用了,我靠,发现还是不行,run起来之后,发现报错 During startup program terminated with signal SIGTRAP, Trace/breakpoint trap
。主要是因为 gdb8.1 的问题和苹果系统的SIP机制,更换版本为8.0.1就可以解决问题。更换gdb(这个过程最好挂上代理)
brew unlink gdb
brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/9ec9fb27a33698fc7636afce5c1c16787e9ce3f3/Formula/gdb.rb
brew pin gdb
还需要关闭macOS系统的SIP机制,步骤如下:
1、重启计算机,按住command+R 直到logo出现进入恢复模式
2、进入恢复模式之后,左上角选择Utils -> Terminate
3、输入 csrutil disable
4、Restart
重启计算机,gdb应该会正常工作了。记录备忘 ~