MAC下使用GDB调试redis

因为在看redis源码,调试的时候一直出问题,所以记录一下踩过的坑。

权限不足,或者启动后卡住

提示:

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

或者

[New Thread 0x1603 of process 1648]
warning: unhandled dyld version (15)

解决方法:

  1. 打开 “钥匙串管理”
  2. 钥匙串访问 -> 证书助理 -> 创建证书
  3. 起个名字,比如gdb-cert,点击“让我覆盖这些默认值”
  4. 一路确定,到“指定用于该证书的位置”后选择“系统”,最后确定成功
  5. 选择“系统”找到刚才创建的证书,双击后弹出,全选“始终信任”
  6. 重启系统
  7. 使用该证书对gdb签名:codesign -s gdb-cert /usr/local/bin/gdb
  8. 设置gdb启动选项:echo "set startup-with-shell off" >> ~/.gdbinit
  9. 新建一个 gdb-entitlement.xml
  10. 输入:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>com.apple.security.cs.debugger</key>
    <true/>
</dict>
</plist>
  1. 在终端输入:codesign --entitlements gdb-entitlement.xml -fs gdb-cert /usr/local/bin/gdb
  2. 重新开一个terminal,就可以用gdb运行了
  3. 如果还是不行,用sudo gdb来debug程序

附上understand破解

  1. brew install understand
  2. 打开后点击 enter License code
  3. 点击 use legacy licenseing
  4. ADD A license
  5. Add Eval SDL (RegCode)
  6. 弹出注册界面,输入license code:
185F996AEEC2
7808F4308398
F38075B00218
EBF578C60F6E
00479F7EE8D6
comments powered by Disqus