从 10.5 开始,有许多主题涉及 macOS 的协同设计问题。 我想要实现的是让 Geany 与 GNU 调试器 (gdb) 一起工作。调试器在 geany 中找到,但(已经众所周知的)错误消息是:
Error message from debugger back end:
Unable to find Mach task port for process-id 39847: (os/kern) failure (0x5).\n (please check gdb is codesigned - see taskgated(8))
Unable to find Mach task port for process-id 39847: (os/kern) failure (0x5).\n (please check gdb is codesigned - see taskgated(8))
通常有许多限制需要考虑(应该)允许使用 gdb,例如gdb 8.0.1 可能可以工作,gdb 8.1 根本无法工作 - see here ,也在 Lazarus Wiki 中得到证实。
0) 我根据各种说明中涵盖的步骤创建了我的证书“gdb-cert”。示例here
1) 我按照对 gdb 可执行文件进行协同设计的步骤(来源: gdb 和 Stackoverflow )在我的情况下位于
/usr/local/Cellar/gdb/8.0.1/bin/gdb
(再次注意,8.1 对于某些语言存在问题 - pascal 也是如此)。如果您想确保代码已签名,请转到
$ codesign -vvvv gdb
在各自的目录中。我的是。
2)确保证书实际上被分配为有资格进行代码签名 - 就我而言。它也是值得信赖的——这是必要的。
3) 我还尝试了上述的另一种方式来运行 gdb,其中编辑了文件(请注意,必须首先在恢复中禁用 SIP!!!)
仅当在恢复中使用 csrutil disable
时,修改才有效。
sudo nano /System/Library/LaunchDaemons/com.apple.taskgated.plist
毁灭性的事情,在这一步之后,没有代码编辑器会再次启动(!!),直到撤消此更改(Geany、Atom、文本编辑器、MS Visual Studio - 插入后全部损坏-sp 到文件)
4) 在某些主题中,我发现只有在恢复中使用命令 csrutil enable --withouth
debug 时,调试才会起作用。这并没有改变任何东西。
最终我得到了:
如果有人能证实这种行为,我将不胜感激,这是一个解决方案:)
最佳答案
这与协同设计权利有关。您必须在签名过程中添加“com.apple.security.cs.debugger” key 。
例如,您必须将 codesign -fs gdbcert/usr/local/bin/gdb
更改为 codesign --entitlements gdb.xml -fs gdbcert/usr/local/bin/gdb
.
gdb.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>
关于debugging - macOS Mojave : How to achieve codesign to enable debugging (gdb)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52699661/