我目前正在尝试调试 Java 程序中的一个问题,该问题在某些时候跳转到 JNI 函数并且永远不会从中返回。因此,为了调试此 JNI 代码,我想附加 LLDB。问题是 Java 进程没有设置
com.apple.security.get-task-allow
权限,因此调试器无法附加到该进程。
显然一种可能的解决方案是在启动时禁用系统完整性保护。由于我在公司机器上工作,这对我来说是不可能的。
是否有一个 JDK 版本具有所需的权限集?
我不知道是否有任何预编译的 JDK 二进制文件设置了
com.apple.security.get-task-allow
,但是如果您愿意从源代码编译二进制文件,则有一个配置选项来设置权利:--with-macosx-codesign=debug
,它将尝试执行特别签署以添加特殊权利 com.apple.security.get-task-allow
您可以阅读如何编译您自己的 JDK:
这里:如何从源码编译JDK?在 stackoverflow.com
和此处 构建 JDK。在 openjdk.org
如果您愿意下载一堆 JDK,您可以使用
codesign -d --entitlements :- /path/to/jdk/bin/java
检查是否有 get-task-allow
权限,或者使用 codesign -dv --verbose=4 /path/to/jdk/bin/java
来查看是否 Signature=adhoc