文章目錄
簡 述: 在 mac 使用 gdb 調試程序時候,會遇到報錯如下,本文就是專門解決這個問題的。本教程也是目前網上最新最詳細的在 mac 安裝 gdb 的教程
(gdb) run
Starting program: /Users/muli/project/github/linuxExample/06_gdb/mainApp
Note: this version of macOS has System Integrity Protection.
Because `startup-with-shell' is enabled, gdb has worked around this by
caching a copy of your shell. The shell used by "run" is now:
/Users/muli/Library/Caches/gdb/bin/zsh
Unable to find Mach task port for process-id 20050: (os/kern) failure (0x5).
(please check gdb is codesigned - see taskgated(8))
在 MacOS 10.14.6 的系統下,發現安裝 gdb 8.3 (當前最新) 的坑不是一般的多,那真真的多。鑑於網上的教程都是過時的,且按照某一篇, 你是不可能順利運行安裝成功的。所以浪費我昨天一個晚上解決這個問題(我的時間也很寶貴的),今天又花費一晚上時間,完成這篇圖文並茂的的安裝教程。作爲一個日後的記錄和給後來者一個方便。
其中大概思路:
- 創建整證書,證書授權
- 關閉 SIP 安全防護,重啓系統;
- sudo 運行 gdb 調試;
- kill 卡死進程, 再次重新 gdb 調試;
- 成功
筆記本系統環境:
💻: MacOS 10.14.6
查看是否安裝 gdb:
-
執行
brew search gdb
,搜索 brew 倉庫:
命令 brew 安裝 gdb:
-
執行
brew install gdb
使用 brew 工具安裝 gdb (默認最新),等待安裝完畢; -
執行
which gdb
查看安裝的路徑爲/usr/local/bin/gdb
-
執行
gdb -v
查看的 gdb 安裝版本,版本爲8.3
創建系統證書:
-
打開 鑰匙串訪問
-
左上角進入
鑰匙串訪問 - 證書助理 - 創建證書
-
創建證書, 名稱隨意,如 gdb_codesigned ,其中選擇爲 自簽名根證書 ,代碼簽名 ,還有✅ 讓我覆蓋這些默認值
-
後面一路點擊下一步,不用做任何修改 ,貼出來中間的過程圖
-
一直到這步驟,進行修改,選擇 “系統”,
-
重新再來一次, 證書創建成功
修改證書:
-
雙擊 證書打開, 勾選使用 始終信任 ,然後關閉此此窗口,會自動保存修改
對證書授權:
-
執行
codesign -fs gdb_codesigned /usr/local/bin/gdb
命令,給證書授權;在執行echo "set startup-with-shell off" >> ~/.gdbinit
, 關閉 MacOS 系統的 SIP 安全驗證 ;設置完這咯愛那個步驟後, 要重啓電腦 ,使得配置生效。codesign -fs gdb_codesigned /usr/local/bin/gdb echo "set startup-with-shell off" >> ~/.gdbinit
驗證 gdb 證書創建,關閉 SIP 成功:
-
使用一個小的 c++ 項目測試下,下載地址,執行
g++-9 *.cpp -o mainApp -g
生成可調試的可執行程序 mainApp ,然後運行sudo gdb mainApp
期間可能會遇到的奇怪的問題?
遇到證書創建失敗?
-
若是失敗,看到下圖提示:
-
解決方法:則重頭創建一次系統證書,最後這一步選擇 “登錄” ,編繪創建成功。
-
且證書創建成功後,需要手動將其從登錄區域, 移動到系統區域
遇到 Unable to find Mach task port for process-id 2358: (os/kern) failure (0x5).
:
-
出現如下如下代碼:
Unable to find Mach task port for process-id 2358: (os/kern) failure (0x5).
(please check gdb is codesigned - see taskgated(8))
-
解決方法:按下
control + z
退出終端 ,使用 sudo 權限 ,運行命令sudo gdb mainApp
調試
遇到 [New Thread 0x1303 of process 971]
卡死:
-
出現如下代碼
[New Thread 0x1303 of process 971]
代碼,被進程被卡死(通常第一次會遇到這個問題) 。
-
解決方法:按下
control + z
退出終端,執行killall 2415
殺死該進程;然後再次運行sudo gdb mainApp
調試, 按下r
調試。
一些必須注意點:
- 執行命令時候,證書生效,有的帶 -f 參數;
- 命令
codesign -fs gdb_codesigned /usr/local/bin/gdb
時候,gdb_codesigned
要換成你的證書名稱 - 有的證書博客證書的起名稱爲 gdb_cert, 但是命令 和終端截圖爲 gdb-cert; 注意短槓
- 另外一個是 dgb 最好需要帶絕對路徑,避免找不到;
- 看完這篇教程,一定要點贊
參考博客: