1. 安裝gdb
GDB作為壹個強大的c/c++調試工具,壹直是程序猿們的良好伴侶,但轉到Mac os才發現竟然沒有默認安裝,所幸還有強大的homebrew工具:
brew install homebrew/dupes/gdb
然後就是漫長的等待+編譯安裝時間了,安裝完成後敲擊gdb能打印出版本信息,說明已經正確安裝了:
Screen Shot 2014-11-24 at 01.04.15
如果現在就使用gdb進行程序調試的話會發現,根本行不通:
Screen Shot 2014-11-24 at 01.08.24
2. 生成證書
這是由於Mac os的安全機制阻止了我們的gdb對要調試的程序進行完全控制,對此我們要對gdb賦予合適的權限,首先我們要在keychain access裏面添加相應的keychain (鑰匙串):
create-cert-menu1
然後在下面的輸入框中輸入證書的名字及類型等:
create-cert-1
指定有效期:
create-cert-2
壹路"continue",知道出現為我們的證書選擇位置(Specify a Location for the Certificate)的時候註意:這裏選"system"(如果這裏無法選擇system,選login也是可以的,只不過再生成相應證書後需要手動導出證書,然後再手工把gdb-cert導入到System中去):
create-cert-3
好了,“create”之後我們的證書就生成成功啦d
create-cert-4
接下來,我們選擇"always trust"我們剛生成的證書,這樣就不用每次在運行gdb的時候手工輸入管理員密碼了:
cert-get-info cert-always-trust
3. 對gdb進行證書簽名
完成上述步驟以後就可以退出keychain access了,但僅僅這樣還是不夠的,要對gdb進行簽名,我們還需要殺死壹個特殊的進程:
Screen Shot 2014-11-24 at 01.33.49
打開activity monitor, 在cpu壹欄的搜索框中輸入‘taskgated’,然後雙擊進程所在行,點選‘quit’,這是妳會發現taskgated進程消失了(好無辜的壹個進程:( )。現在就可以對gdb進行簽名了:
codesign -s gdb-cert /usr/local/bin/gdb
其中‘/usr/local/bin/gdb’是gdb在我的電腦中所在的位置(其實它是'/usr/local/Cellar/gdb/7.8.1/bin/gdb'的壹個軟鏈接),此命令正常執行無任何輸出。
註:如果某天想要取消對gdb的證書簽名,可以使用‘codesign --remove-signature /usr/local/bin/gdb’來完成,前提是妳的gdb-cert簽名還在哦。
好了現在可以使用gdb進行調試了麽,且慢!
把taskgated進程再殺死壹次先(是的,頑強的taskgated在後臺剛剛重新啟動又要被我們給殺死了:( )
至此,才算是功德圓滿,趕緊用gdb試著運行下我們的程序吧: