首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在MAC操作系统Catalina上调试内核恐慌,因为Catalina在只读文件系统中

如何在MAC操作系统Catalina上调试内核恐慌,因为Catalina在只读文件系统中
EN

Stack Overflow用户
提问于 2019-11-26 06:17:47
回答 2查看 1.2K关注 0票数 0

在我们的自定义kext中,面对访问SMB协议的“脱机”属性的内核恐慌。如何在MAC操作系统Catalina上调试这些内核恐慌。

由于只读文件系统,Catalina不支持调试内核扩展步骤.此外,带有IOKit.framework的kext没有在MacOS10.14.x上加载错误

根据文档https://developer.apple.com/library/archive/technotes/tn2004/tn2118.html

  • Unable,没有“//KernelDebugKit/mach_
  • ”,gdb -arch i386 /Volumes/KernelDebugKit/mach_kernel
  • 无法通过“/”卷下的kdump守护进程创建PanicDumps目录来收集恐慌,因为Catalina是只读的文件系统Ref:
  • 以加载带有IOKit框架引用的kexts,其中存在在MacOS10.14上出现错误的调试:

代码语言:javascript
复制
The super class vtable '__ZTV9IOService' for vtable '__ZTV23com_microfocus_cisiokit' is out of date. Make sure your kext has been built against the correct headers.
The super class vtable '__ZTV12IOUserClient' for vtable '__ZTV8cisiokit' is out of date. Make sure your kext has been built against the correct headers.

是否有文档指定如何在设置只读文件系统的mac上调试内核恐慌?

注意:禁用SIP也不起作用。

提前谢谢。

EN

回答 2

Stack Overflow用户

发布于 2019-12-21 16:15:39

回答有关调试macOS内核扩展的问题:

文档中没有“/卷/KernelDebugKit/mach_ There”

必须安装

  1. 内核调试工具包,因为必须安装OSX10.10。当您下载并打开KDK内核时,您需要运行它包含的安装程序。

例如/Library/Developer/KDKs/KDK_10.15_19A536g.kdk/System/Library/Kernels/kernel

--由于只读文件系统,卡塔琳娜不支持调试内核扩展步骤.

无法在“/”卷下创建PanicDumps目录以通过kdump守护进程收集恐慌,因为Catalina是只读文件系统Ref:https://developer.apple.com/library/archive/technotes/tn2004/tn2118.html

注意,kdumpd接受转储的位置作为它的命令行参数,因此您可以选择一个可写位置。无论如何,您都需要在/Library/LaunchDaemons下复制launchd,因为/System/Library/LaunchDaemons下的原始文件是不可写的。但是,我不能100%确定内核转储在现代macOS版本上是否仍然正确工作。

还请注意,您可以从技术上重新装入只读操作系统基础卷读写。不过,我不建议在测试系统以外的任何东西上这样做。

票数 1
EN

Stack Overflow用户

发布于 2019-12-21 16:21:13

回答您关于kext加载的问题:

还没有在MacOS10.14.x上加载带有IOKit.framework的文本并有错误

无法在MacOS10.14上加载带有IOKit框架引用并有错误的kexts以进行调试:

vtable '__ZTV9IOService‘的超类vtable '__ZTV23com_microfocus_cisiokit’已经过时了。确保您的kext是针对正确的标题构建的。vtable '__ZTV12IOUserClient‘的超类vtable '__ZTV8cisiokit’已经过时了。确保您的kext是针对正确的标题构建的。

线索在这里的错误消息中:确保您的kext是针对正确的标头构建的。

当您使用macOS SDK构建一个比试图加载它的OS版本更新的kext时,您会遇到这个错误。因此,在您的示例中,我假设您使用macOS 10.15SDK来构建kext,并期望它在macOS 10.14上加载。不要这样做,使用10.14SDK,或者使用与您希望在kext中支持的最老macOS版本相匹配的版本。

还请注意,kext构建使用的是Kernel.framework,而不是IOKit.framework。后者用于构建访问I/O工具包的用户空间工具、库和应用程序。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59044834

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档