Mac上安装gdb
2015-07-13 21:37
323 查看
1. 安装gdb
GDB作为一个强大的c/c++调试工具,一直是程序猿们的良好伴侣,但转到Mac os才发现竟然没有默认安装,所幸还有强大的homebrew工具:brew install homebrew/dupes/gdb
然后就是漫长的等待+编译安装时间了,安装完成后敲击gdb能打印出版本信息,说明已经正确安装了:
![](http://www.beanmoon.com/wp-content/uploads/2014/11/Screen-Shot-2014-11-24-at-01.04.15.png)
如果现在就使用gdb进行程序调试的话会发现,根本行不通:
![](http://www.beanmoon.com/wp-content/uploads/2014/11/Screen-Shot-2014-11-24-at-01.08.24.png)
2. 生成证书
这是由于Mac os的安全机制阻止了我们的gdb对要调试的程序进行完全控制,对此我们要对gdb赋予合适的权限,首先我们要在keychain access里面添加相应的keychain (钥匙串):![](http://www.beanmoon.com/wp-content/uploads/2014/11/create-cert-menu1.png)
然后在下面的输入框中输入证书的名字及类型等:
![](http://www.beanmoon.com/wp-content/uploads/2014/11/create-cert-1.png)
指定有效期:
![](http://www.beanmoon.com/wp-content/uploads/2014/11/create-cert-2.png)
一路"continue",知道出现为我们的证书选择位置(Specify a Location for the Certificate)的时候注意:这里选"system"(如果这里无法选择system,选login也是可以的,只不过再生成相应证书后需要手动导出证书,然后再手工把gdb-cert导入到System中去):
![](http://www.beanmoon.com/wp-content/uploads/2014/11/create-cert-3.png)
好了,“create”之后我们的证书就生成成功啦d
![](http://www.beanmoon.com/wp-content/uploads/2014/11/create-cert-4.png)
接下来,我们选择"always trust"我们刚生成的证书,这样就不用每次在运行gdb的时候手工输入管理员密码了:
![](http://www.beanmoon.com/wp-content/uploads/2014/11/cert-get-info.png)
![](http://www.beanmoon.com/wp-content/uploads/2014/11/cert-always-trust.png)
3. 对gdb进行证书签名
完成上述步骤以后就可以退出keychain access了,但仅仅这样还是不够的,要对gdb进行签名,我们还需要杀死一个特殊的进程:![](http://www.beanmoon.com/wp-content/uploads/2014/11/Screen-Shot-2014-11-24-at-01.33.49.png)
打开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试着运行下我们的程序吧:
![](http://www.beanmoon.com/wp-content/uploads/2014/11/Screen-Shot-2014-11-24-at-01.43.55.png)
相关文章推荐
- CS224D Lecture 4 札记
- Python socket 基础
- HDU-5281
- 红黑树
- 动态内存分配
- 【学习笔记】【OC语言】类方法
- Win7安装错误提示与解决办法大全
- 【JSP】JSP向MySQL写入|读出中文数据——乱码问题
- 大话设计模式(一 面试受挫——代码无错就是好?)
- PAT 数据结构 08-排序4. The World's Richest (25)
- 【甘道夫】Win7x64环境下编译Apache Hadoop2.2.0的Eclipse小工具
- PHP核心代码库中的APC缓存说明123
- Set8087CW
- 对类的继承的理解
- Android使用Volley保持与服务器的会话
- 数组配对(算法)
- java jar 打包命令
- [leedcode 67] Add Binary
- Android(java)学习笔记126:Android Studio中build.gradle简介
- Python开发入门与实战3-Django动态页面