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 
版权声明:本文为博主原创文章,转载请附上博文链接!

你可能感兴趣的:(linux)