macOS系统下,因系统安全策略问题,不允许没有给予许可的进程来调试其它进程。如果希望进行调试,需要通过证书的方式给予调试程序信任权限。以下方式调整成功的操作系统版本为10.15.2。

  1. 打开 Keychain Access 应用程序(通过聚焦搜索或其它方式,打开即可)。
  2. 打开之后,默认状态是如下图所示:

注意“系统”一栏是带锁的……执行添加证书之前要右键它做解锁操作。网上的教程无一例外没有提这个锁的存在。

  1. 执行新建证书操作。第一步注意证书名记住,和后面敲的命令有关。证书类型改为“代码签名”(英文版是Code Signing)。还要勾选“覆盖默认设置”一项。之后一直next,到最后一步“指定存储该证书的位置”时,改成“系统”。按提示执行验证操作即可。
  2. 双击打开刚刚建立的证书,把所有信任权限全部改为“始终信任”。
  3. 对OS版本为10.14以下的系统,请更新系统到更高版本,博文没必要为你们浪费笔墨。对OS版本为10.14或更高的系统,首先建立一个文件,文件名任意,这里设为a.xml。内容如下:
<?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>
</pre>
  1. terminal下执行以下命令:
codesign --entitlements /path/to/a.xml -fs gdb-cert-name $(which gdb)
  1. 重启系统即可。

高版本的MacOS系统下,还会遇到During startup program terminated with signal SIG113, Real-time event 113的报错。解决方式是运行gdb,调试开始前时指定启动参数set startup-with-shell off即可解决。如果不想每一次启动调试都要输入该启动参数,可以用.gdbinit文件控制在项目文件夹中每一次启动gdb,都会执行该指令。