1. 程式人生 > >gdb在mac10.13系統上編譯安裝並且設定codesign鑰匙串

gdb在mac10.13系統上編譯安裝並且設定codesign鑰匙串

https://blog.csdn.net/wj1066/article/details/83653153

 

無法建立系統的鑰匙串,可以先建立登陸型別的鑰匙串,然後點到系統類,匯入專案,匯入進去

https://blog.csdn.net/matrix_zzl/article/details/78571349

先完成,重啟按住command + R進入恢復模式,開啟終端,輸入csrutil enable --without debug,再重啟系統。

 

0.1 背景

Gdb是一款程式碼除錯工具。Mac下依舊支援,但是由於MacOS系統本身以及版本不協調等原因使用過程會遇到各種各樣的問題。本文詳細記錄了從Gdb安裝,鑰匙串配置,與VScode結合除錯的過程。

0.2 版本

Mac版本:macOS High Sierra 10.13.6

Gdb版本:8.0

1 Gdb安裝

最快捷的方法是使用brew來安裝,命令如下。

brew install gdb
1
目前(2018.11.2)brew install 預設會安裝8.2版本,但是在後續使用的過程遇到了一些問題(Mac high Sierra和gdb8.0以上的版本有很多地方不相容,強烈不建議使用),所以不建議使用這個版本。筆者建議使用8.0的版本,8.0安裝如下方式。

點選這個連結下載8.0原始碼的安裝包 http://ftp.gnu.org/gnu/gdb/gdb-8.0.tar.gz 然後解壓。進入解壓後的目錄,依次執行如下命令。

# 配置
./configure

# 編譯
make -j4

# 安裝
make install

# 檢視gdb版本
gdb -v
1
2
3
4
5
6
7
8
9
10
11
一切順利的話可以看到gdb的版本為8.0。

2 配置除錯許可權

如果這時候直接除錯程式會遇到如下錯誤。

(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))
1
2
3
4
這是因為Darwin核心在你沒有特殊許可權的情況下,不允許除錯其他程序。除錯某個程序,意味著對這個程序有完全的控制權限。所以出於安全考慮預設是禁止的。所以允許gdb控制其它程序最好的方法就是用系統信任的證書對它進行簽名。

2.1 建立證書

command+空格鍵,輸入鑰匙串訪問。
選單上點選鑰匙串訪問->證書助理->創見證書
填寫如下資訊
名稱:gdb_codesign
身份型別:自簽名根證書
證書型別:程式碼簽名
勾選:讓我覆蓋這些預設設定
之後一直next,直到出現“指定證書位置”,選擇系統,然後完成。
之後在左側邊欄上邊選擇“系統”,下邊選擇“我的證書”可以看到建立的證書,然後雙擊。展開“信任”這一項,選擇“始終信任”。
關掉視窗,此時需要驗證密碼。
如果在最後一步選擇了“系統”,但是完成後提示“未知錯誤=-2xxxxxxxx”,可以先以登入的方式建立證書。然後在登入欄中找到,拖到桌面上,然後再拖回系統欄中。其他操作相同。

2.2 對gdb簽名

Terminal中執行下列命令

# 如果提示找不到gdb則指定gdb的全路徑
codesign -s gdb_codesign gdb
1
2
2.3 重啟

否則簽名不會生效。

3 vscode中使用gdb

gdb很強大,但是與vscode良好的視覺化介面配合會更好。

官網下載vscode:https://code.visualstudio.com/download
安裝相關外掛:C/C++ Clang,C++ Intellisense,C/C++
配置launch.json,當中配置成gdb即可。
Reference

1.解決GDB在Mac下不能除錯的問題:https://segmentfault.com/a/1190000004136351

2.XGBoost解析系列-準備:https://blog.csdn.net/matrix_zzl/article/details/78571349
--------------------- 
作者:weijian001 
來源:CSDN 
原文:https://blog.csdn.net/wj1066/article/details/83653153 
版權宣告:本文為博主原創文章,轉載請附上博文連結!