想在mac上使用gdb调试程序,调用后出现“ (please check gdb is codesigned - see taskgated(8))”无法调试,搜索引擎上找到的解决办法几乎都是的适用Mac10.14(mojava)之前的,不起作用。以下内容给出该问题在Mac OS X 10.14+之后版本的处理办法。
运行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))因为没有特殊权限,Darwin内核将拒绝允许gdb调试另一个进程,因为调试一个进程意味着完全控制该进程。默认情况下不允许这样做,因为这种操作可能是恶意软件利用程序做一些非法操作。
找到“钥匙串访问”(/Applications/Utilities/Keychain Access.app),一般在“启动台”-“其他”里面可以找到。
打开后依次访问“钥匙串访问”-“证书助理”-“创建证书”。
证书名称以“gdb-cert”为例,证书类型选择“代码签名”,勾选“让我覆盖这些默认值”,一路默认“继续”,最后在“钥匙串”的地方选择“系统”。
双击穿件好的证书gdb-cert,打开信任选卡,设置其中“代码签名”的信任为“始终信任”。
创建一个gdb-entitlement.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.allow-jit</key> <true/> <key>com.apple.security.cs.allow-unsigned-executable-memory</key> <true/> <key>com.apple.security.cs.allow-dyld-environment-variables</key> <true/> <key>com.apple.security.cs.disable-library-validation</key> <true/> <key>com.apple.security.cs.disable-executable-page-protection</key> <true/> <key>com.apple.security.cs.debugger</key> <true/> <key>com.apple.security.get-task-allow</key> <true/> </dict> </plist> </pre> 切换root用户,执行下面命令给证书设置xml中的内容。 codesign --entitlements gdb-entitlement.xml -fs gdb-cert $(which gdb) 重启系统或通过重启taskgated服务刷新证书和签名数据。 sudo killall taskgated英文文档: https://sourceware.org/gdb/wiki/PermissionsDarwin