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
暴力解决这个问题,但是更加优雅方法是这样的:
- 打开macOS自带的“钥匙串访问 / Keychain Access”,左上角菜单选择“证书助理 -> 创建证书”。
- 在弹出的对话框里随便选择一个名称,比如“gdb-cert”;身份类型选择“自签名根证书 / Self Signed Root”;整数类型选择“代码签名 / Code Signing”;勾选“让我覆盖这些默认值 / Let me override defaults”。
- 一路继续,可以选择一个长一些的有效期,最后一个“指定用于该证书的位置 / Specify a Location For The Certificate”选择“系统 / System”。
- 创建完成后,双击列表中新建的证书,将“代码签名 / Code Signing”改为“始终信任 / Trust”
- 在终端中进行最后再次运行GDB,第一次run的时候可能会要求输入管理员账号和密码,之后gdb就可以正常使用了。
1
2sudo killall taskgated
codesign -fs gdb-cert /usr/local/bin/gdb
lldb
macOS似乎推荐用户使用lldb调试,对于lldb的code-signing方式,可以直接查看opensource.apple.com的官方文档,过程和gdb比较相似,这里不再赘述。
唯一的问题在于,第一次运行可能会提示错误:
ImportError: No module named six
只需要做:
1 | pip install six |
那么问题来了,谁能告诉我lldb好处都有啥w