在MacOS10.14.6安裝最新gdb8.3的詳細教程,含可能遇到的所有坑(網上最新教程)

簡 述: 在 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 最好需要帶絕對路徑,避免找不到;
  • 看完這篇教程,一定要點贊

參考博客:

在macOS10.14上使用GDB的教程

macbook創建自簽名根證書失敗,怎麼辦?

mac book上安裝和使用gdb

Tips:如何優雅的使用GDB調試Go

解決GDB在Mac下不能調試的問題

MAC OSX系統使用gdb編譯程序時的報錯處理

macOS High Sierra下無法使用gdb的解決辦法

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章