今天在 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
測試成功如下: