今天在 OS X EI Capitan 10.11.6 中安装 gdb 的时候,出了一堆状况,写下此文以便以后能够时刻提醒自己。
解决方案
1、安装 gdb
$ brew install gdb
$ gdb --version
GNU gdb (GDB) 8.2.1
2、我们尝试运行 gdb 时,报如下错误:
Unable to find Mach task port for process-id 28885: (os/kern) failure (0x5).
(please check gdb is codesigned - see taskgated(8))
3、创建证书
执行菜单 钥匙串访问->证书助理->创建证书
填写信息
- 证书名称:gdb-cert
- 身份类型:自签名根证书
- 证书类型:代码签名
- 勾选:让我覆盖这些默认值
然后一直点击继续,直到指定证书位置的步骤,选择钥匙串保存的位置是系统
点击创建,输入系统密码,创建完成。(极有可能创建失败,这时可以选择钥匙串保存位置为登录,然后导出证书,再然后把证书导入到系统)
打开证书简介界面,点击信任->代码签名,将其改为始终信任
重启系统刷新系统证书和代码签名数据
-
给 gdb 签名
$ sudo killall taskgated
$ codesign -fs gdb-cert "$(which gdb)" # -f 表示签名若已存在就覆盖 -
添加 ~/.gdbinit 文件
$ echo "set startup-with-shell off" >> ~/.gdbinit
-
最后会出现如下错误
$ sudo gdb test.out
(gdb) r
Starting program: /Users/apple/Desktop/code/test.out
[New Thread 0x1103 of process 843]
[New Thread 0xe03 of process 843] During startup program terminated with signal SIGTRAP, Trace/breakpoint trap.
4、这个时候我们只需要更换 gdb v8.1 到 gdb v8.0.1,用如下代码替换:
$ brew uninstall gdb
$ brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/c3128a5c335bd2fa75ffba9d721e9910134e4644/Formula/gdb.rb
测试成功如下: