macOS Sierra配置GDB和lldb

GDB

今天遇到一个C的问题,想使用GDB调试一下。在run的时候发现GDB报了一条错误:

During startup program terminated with signal SIG113, Real-time event 113.

系统版本macOS Sierra 10.12.3,GDB是用homebrew安装的,版本7.12.1。经过了解,可以向~/.gdbinit中写入一行set startup-with-shell off解决。那么一行代码搞定就是:

1
echo "set startup-with-shell off" >> ~/.gdbinit

之后重新运行GDB,run的时候依旧报错,只是这次错误代码换了一个:

Unable to find Mach task port for process-id xxxx: (os/kern) failure (0x5).
(please check gdb is codesigned - see taskgated(8))

这个就说的比较清楚了,需要对gdb进行codesign。虽然可以用sudo gdb暴力解决这个问题,但是更加优雅方法是这样的:

  1. 打开macOS自带的“钥匙串访问 / Keychain Access”,左上角菜单选择“证书助理 -> 创建证书”。
  2. 在弹出的对话框里随便选择一个名称,比如“gdb-cert”;身份类型选择“自签名根证书 / Self Signed Root”;整数类型选择“代码签名 / Code Signing”;勾选“让我覆盖这些默认值 / Let me override defaults”。
  3. 一路继续,可以选择一个长一些的有效期,最后一个“指定用于该证书的位置 / Specify a Location For The Certificate”选择“系统 / System”。
  4. 创建完成后,双击列表中新建的证书,将“代码签名 / Code Signing”改为“始终信任 / Trust”
  5. 在终端中进行
    1
    2
    sudo killall taskgated
    codesign -fs gdb-cert /usr/local/bin/gdb

最后再次运行GDB,第一次run的时候可能会要求输入管理员账号和密码,之后gdb就可以正常使用了。

lldb

macOS似乎推荐用户使用lldb调试,对于lldb的code-signing方式,可以直接查看opensource.apple.com的官方文档,过程和gdb比较相似,这里不再赘述。

唯一的问题在于,第一次运行可能会提示错误:

ImportError: No module named six

只需要做:

1
pip install six

那么问题来了,谁能告诉我lldb好处都有啥w