MacOS Gdb Debug

最近又開始了我的Go語言開發(fā)之路,開發(fā)過程中想使用Gdb調(diào)試代碼,但始終因為各種報錯而導(dǎo)致Gdb調(diào)試不了,今天晚上乘著吃了一頓烤肉的干勁,決定解決這個問題。遇見的問題主要有兩個:

1.  根證書創(chuàng)建錯誤。
2. Gdb跑起來之后,會報:`During startup program terminated with signal SIGTRAP, Trace/breakpoint trap`。

根證書創(chuàng)建錯誤

MacOS系統(tǒng)是不容許沒有許可證的進程去調(diào)試其他進程,所以需要創(chuàng)建一個系統(tǒng)的根證書,創(chuàng)建就創(chuàng)建唄,網(wǎng)上一搜全都是教程,這里就啰嗦了。創(chuàng)建過程中你極大可能會遇見這么一個問題(沒遇見算你狠)

未知錯誤 -2,147,414,007

這是什么鬼東西,網(wǎng)上一搜也沒有人說明這個報錯的原因,但針對這個報錯,可以這樣解決:

在MacOSX上,lldb需要進行代碼簽名。調(diào)試和發(fā)布版本
使用名為的代碼簽名證書設(shè)置代碼簽名
lldb_codesign。
_
如果您還沒有,則需要:
-  Launch / Applications / Utilities / Keychain Access.app
_
- 在Keychain Access中選擇“Keychains”中的“l(fā)ogin”鑰匙串
列表在窗口的左上角。
_
- 選擇以下菜單項:
_
鑰匙串訪問 - >證書助理 - >創(chuàng)建證書......
_
- 設(shè)置以下設(shè)置
_
Name = lldb_codesign
身份類型=自簽名根
證書類型=代碼簽名
_
- 單擊繼續(xù)
- 單擊繼續(xù)
- 單擊“完成”
- 點擊“我的證書”
- 雙擊新的lldb_codesign證書
- 調(diào)低“信任”披露三角形
_
更改:
使用此證書時:始終信任
_
- 輸入您的登錄密碼進行確認并使其受信任
_
SnowLeopard需要接下來的步驟,但可能是因為一個bug
Keychain Access如何制作證書。
_
- 選項 - 將新的lldb_codesign證書從登錄密鑰鏈拖到
主Keychain Access窗口的Keychains窗格中的System keychain
在系統(tǒng)鑰匙串中制作此證書的副本。你必須這樣做
多次授權(quán),在被問到時將其設(shè)置為“始終信任”。
- 切換到系統(tǒng)鑰匙串,然后拖動lldb_codesign的副本
在那里進入桌面。
- 切換到終端,然后運行以下命令:
_
sudo security add-trust -d -r trustRoot -p basic -p codeSign -k /Library/Keychains/System.keychain~/ Desktop / lldb_codesign.cer
_
- 右鍵單擊??“系統(tǒng)”鑰匙串中的“l(fā)ldb_codesign”證書(不是
“登錄”,但“系統(tǒng)”中的一個,并選擇“刪除”將其刪除
“系統(tǒng)”鑰匙串。
- 重啟

根證書創(chuàng)建完成之后,就可以給gdb授權(quán)了,執(zhí)行命令如下:

sudo killall taskgated
sudo codesign -fs gdb_codesign /usr/local/bin/gdb

Gdb調(diào)試報錯

準(zhǔn)備開始使用了,我靠,發(fā)現(xiàn)還是不行,run起來之后,發(fā)現(xiàn)報錯 During startup program terminated with signal SIGTRAP, Trace/breakpoint trap。主要是因為 gdb8.1 的問題和蘋果系統(tǒng)的SIP機制,更換版本為8.0.1就可以解決問題。更換gdb(這個過程最好掛上代理)

brew unlink gdb
brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/9ec9fb27a33698fc7636afce5c1c16787e9ce3f3/Formula/gdb.rb
brew pin gdb

還需要關(guān)閉macOS系統(tǒng)的SIP機制,步驟如下:

1、重啟計算機,按住command+R 直到logo出現(xiàn)進入恢復(fù)模式
2、進入恢復(fù)模式之后,左上角選擇Utils -> Terminate 
3、輸入 csrutil disable
4、Restart

重啟計算機,gdb應(yīng)該會正常工作了。記錄備忘 ~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容