从 homebrew 安装 gdb 后(通过$ brew install gdb
),我按照这些说明授予 gdb 附加到进程的权限。
当我到达运行命令的步骤时:
$ codesign --entitlements gdb-entitlement.xml -fs gdb-cert $(which gdb)
我收到以下错误,退出代码为 1:
/usr/local/bin/gdb: errSecInternalComponent
我无法弄清楚哪里出了问题,因此无法继续安装可用的 gdb 版本。有什么帮助吗?
额外信息:
Mac OS X 版本 10.14.4
GDB 版本 8.3(通过 homebrew)
将我的用户添加到
_developer
组中;没有帮助尝试重新启动我的机器,但
sudo killall taskgated
无济于事尝试安装早期版本的 GDB(8.0.1),但得到相同的结果
答案1
我发现如果我首先关注这些说明在尝试完成之前创建证书gdb 签名说明,我能够让它工作。唯一的例外是我必须将证书保留在系统钥匙串中,而不是将其移回登录。
以下是一组合并的步骤:
使用正确的权限创建证书
- 启动 /Applications/Utilities/Keychain Access.app
- 在钥匙串访问中,选择窗口左上角“钥匙串”列表中的“登录”钥匙串。
- 选择以下菜单项:
- 钥匙串访问->证书助理->创建证书...
- 设置以下设置:
- 名称 =“gdb-cert”
- 身份类型 = 自签名根
- 证书类型 = 代码签名
- 单击“创建”
- 可以自定义有效期(3650天=10年)
- 点击“继续”
- 点击完成
- 点击“我的证书”
- 双击新的“gdb-cert”证书
- 向下翻转“信任”三角形,滚动到“代码签名”信任下拉菜单并选择“始终信任”,然后根据需要使用您的用户名和密码进行身份验证。
- 将新的“gdb-cert”代码签名证书(不是同名的公钥或私钥)从“登录”钥匙串拖到主钥匙串访问窗口左侧的钥匙串窗格中的“系统”钥匙串。这会将此证书移动到“系统”钥匙串。您需要再授权几次,并在询问时将其设置为“始终受信任”。
- 在 Keychain Access GUI 中,单击“System”钥匙串中的“gdb-cert”并将其拖到桌面上。拖动将创建一个“~/Desktop/gdb-cert.cer”文件,用于下一步。
- 切换到终端并运行以下命令:
sudo security add-trust -d -r trustRoot -p basic -p codeSign -k /Library/Keychains/System.keychain ~/Desktop/gdb-cert.cer
rm -f ~/Desktop/gdb-cert.cer
将“gdb-cert”证书从“系统”钥匙串拖回到“登录”钥匙串(也许再拖回来……?)编辑:根据评论,显然没有必要- 退出钥匙串访问
- 重启
检查证书:
security find-certificate -c gdb-cert
-> 如果可以找到该证书,则应显示一些详细信息security find-certificate -p -c gdb-cert | openssl x509 -checkend 0
-> 应该说证书不会过期security dump-trust-settings -d
-> 应显示此证书已启用代码签名信任设置(可能显示其他证书/权限)
创建“entitlements.xml”文件:
复制以下文本并将其保存在当前目录中的“entitlements.xml”文件中。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.cs.debugger</key>
<true/>
</dict>
</plist>
对调试器二进制文件进行签名
在终端中运行以下命令:
codesign --entitlements entitlements.xml -fs gdb-cert $(which gdb)
-> 与权利共同设计codesign -vv $(which gdb)
-> 验证代码签名codesign -d --entitlements - $(which gdb)
-> 显示代码签名的详细信息
刷新系统证书
重启机器