MAC上使用gdb(Mac10.12未解决)

原址

由于要在mac上制作自己的malloc动态存储分配器,要使用gdb进行调试,之前一直在centos上用gdb调试,转到mac上竟然发现有这么多坑,还好一一解决了,其原因大多数因为mac上非常关注程序安全性的问题。 
主要会碰到的问题主要有如下问题,如果大家发现如下的问题就可以接着看下去: 
1.-bash: gdb: command not found 
2. `Starting program: /x/y/foo

Unable to find Mach task port for process-id 28885: (os/kern) failure (0x5).

(please check gdb is codesigned - see taskgated(8)) 
3.
The specified item could not be found in the keychain. 
4.
During startup program terminated with signal SIG113, Real-time event 113`

我们一个个来解决。 
1. -bash: gdb: command not found 
这个原因在于你的mac上根本没有下载gdb这个调试工具。那么,解决办法也很简单,把gdb下载下来。 
使用mac自带的brew管理工具。当然,要先更新一下homebrew的软件库。

brew update
  • 1

然后检查一下homebrew软件库里面有没有gdb

brew search gdb
  • 1

如果有的话,就会有如下图片展示: 
这里写图片描述 
有的话,进行安装

brew install gdb
  • 1

如果要权限的话就加个sudo。 
安装成功之后,键入gdb查看是否安装成功

这里写图片描述

安装成功之后,我们是不是就可以大功告成开始调试了呢。。?往往事实是残酷的。 
这里写图片描述 
在第一次安装的往往出现剩下四个问题。 
现在来看第二个问题:

Starting program: /x/y/foo

Unable to find Mach task port for process-id 28885: (os/kern) failure (0x5).

 (please check gdb is codesigned - see taskgated(8))
  • 1
  • 2
  • 3
  • 4
  • 5

这个原因是mac不允许没有给予许可的进程来调试其它进程,那解决办法自然就想到了root,来个根权限。但是,这个会影响到万一gdb调试了重要内核程序后果不是我们想要的,没有安全证书,我们就自己添加一个安全证书: 
首先打开钥匙串访问 
这里写图片描述 
这里写图片描述 
下面关键要修改的东西如下: 
这里写图片描述 
注意一定钥匙代码签名,英文名是codesign,上面的名称随意,这个跟你后面的命令行键入的名称有关,接下来,一直往下 
这里写图片描述 
把这个钥匙串改成system,然后创建由于我已经创建过了,这里就不显示出来了。 
这里写图片描述
双击,将信任改成始终信任: 
这里写图片描述

中间要输入密码之类的,输入就是了。 
OK,只差最后一步 
重启电脑。 
然后在命令行上输入:

codesign -s gdb-cert-hekewen /usr/local/bin/gdb
  • 1

这个gdb-cert-hekewen,要改成你的证书名,后面就是gdb位置。 
没有报错就是成功了。 
3.The specified item could not be found in the keychain. 
这个就是在钥匙串里面没有找到该签名,这个错误往前面看你的安全证书是否按照上面的步骤解决,特别注意证书名字,证书类型,信任,系统,这些有没设置成功。

4.During startup program terminated with signal SIG113, Real-time event 113 
这个错误好像只有在高版本的OSX系统上才出现,解决办法就是在gdb启动的时候,键入命令

set startup-with-shell off
  • 1

就解决了 
当然,如果这样,你每次在调试的时候都要键入,这时候你就可以添加到.gdbinit,每次运行gdb的时候都执行一次。 
关于.gdbinit,就是在你每次用gdb调整程序的时候,如果程序文件中有.gdbinit,就会自动读取里面的命令,全部执行一遍。 
于是乎,我们只要用vim在程序文件里面创建一个.gdbinit,并在里面写上set startyup-with-shell off 
就解决了。 
终于,我们可以开心的在mac上使用gdb了。


猜你喜欢

转载自blog.csdn.net/u010164190/article/details/80312754
今日推荐