debugging - macOS Mojave : How to achieve codesign to enable debugging (gdb)?

标签 debugging gdb geany macos-mojave

从 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 可执行文件进行协同设计的步骤(来源: gdbStackoverflow )在我的情况下位于

/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 时,调试才会起作用。这并没有改变任何东西。

最终我得到了:

  • 代码签名证书
  • 根据我上面的声明签名的 gdb 可执行文件
  • com.apple.taskated.plist 文件未填充字符串 -sp 属性
  • 如果有人能证实这种行为,我将不胜感激,这是一个解决方案:)

    最佳答案

    这与协同设计权利有关。您必须在签名过程中添加“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/

    相关文章:

    c - (-1 >= sizeof(buffer)) 怎么可能是真的?程序无法获得正确的比较结果

    comments - Geany 文本编辑器评论

    android - 如何远程调试webview?

    html - 在浏览器中调试 HTML5 服务器发送的事件

    debugging - PhoneGap Windows Phone,适用于 Android 和 ios,但不适用于 Windows?

    debugging - GDB 未捕获 SIGFPE

    linux - 没有可用的符号表信息

    c - gdb:将 char 数组显示为 big endian shorts

    python - 我如何配置 Geany 来编译和运行我的 Python 程序?

    c++ - 为什么我的 C++ 编译器似乎是用 C 编译的