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

在初次使用 gdb 時,可能會遇到這樣的錯誤:app

(gdb) run
Starting program: /usr/local/bin/fabnacci
Unable to find Mach task port for process-id 23330: (os/kern) failure (0x5).
 (please check gdb is codesigned - see taskgated(8))

這是由於 Darwin 內核在你沒有特殊權限的狀況下,不容許調試其它進程。調試某個進程,意味着你對這個進程有徹底的控制權限,因此爲了防止被惡意利用,它是默認禁止的。容許 gdb 控制其它進程最好的方法就是用系統信任的證書對它進行簽名。spa

建立證書

按入下步驟建立代碼簽名的證書:調試

  1. 打開 Keychain Access 應用程序(/Applications/Utilities/Keychain Access.app)code

  2. 執行菜單 鑰匙串訪問 -> 證書助理 -> 建立證書進程

  3. 填寫以下信息:ci

    • 名稱:gdb_codesignit

    • 身份類型:自簽名根證書io

    • 證書類型:代碼簽名class

    • 鉤選:讓我覆蓋這些默認設置
      登錄

  4. 一路肯定,直到指定證書位置的步驟,選擇系統

  5. 點擊「建立」,會提示用輸入系統登陸密碼,建立完成

  6. 鑰匙串訪問程序中,選擇左側欄的系統個人證書,找到你剛剛建立的gdb_codesign證書並雙擊打開證書信息窗口,展開信任項,設置使用此證書時:始終信任

  7. 關閉證書信息窗口,系統會再次要求輸入系統登陸密碼。

對 gdb 簽名

執行下面的命令:

codesign -s gdb_codesign gdb

執行上面的命令時,系統會再次驗證身份。
完成後必定要重啓系統,這個很重要,不然簽名不會生效。

若是出現下面的錯誤:

MacBook:~ sam$ codesign -s gdb_codesign gdb
gdb: No such file or directory

那麼就指定 gdb 的全路徑。

最新文章請訪問:joywek.com

相關文章
相關標籤/搜索