1

有很多页面解释它,但我找不到。我发现许多文章只适用于 El Capitan 和旧系统。

我现在无法使用 fwkpfv,因为我没有合适的加密狗。我的客户要给我一台支持火线的二手 MacBook。

我的内核扩展使我的盒子恐慌。很奇怪,如果我的同事构建了我的扩展,它工作得很好。我仍然一头雾水。

4

1 回答 1

4

您可以使用以下命令获取“实时”本地内核日志

log stream --process 0

要查看过去的日志,请log show改用,例如:

log show --predicate 'processID == 0' --last 1h | less

然而,这些都不会对内核恐慌有多大帮助,因为日志记录在用户空间中异步发生,所以在恐慌之前你不会得到最后的消息。

在不使用火线的情况下调试 KP 的更多选项,您可能已经知道,但为了完整起见,我将提及它们:

  • 基于以太网的内核调试(相对于火线)。只有测试设备需要有线/迅雷以太网,运行调试器的 Mac 可以在 wifi 上。
  • 您通常可以从恐慌日志本身中提取大量信息:除了符号化堆栈(使用keepsyms=1boot-arg 这样您不必追溯执行)之外,查看寄存器内容和反汇编通常可以告诉您变量的值。
  • 如果您缺少 Apple 代码堆栈跟踪的部分内容,请运行调试或开发内核而不是发布内核。这些是在启用较少优化的情况下构建的,因此函数不太可能被内联等。
  • 您可以在内核中打开大量内存调试和其他诊断选项,例如-zp-zc等等。
  • 如果您可以在虚拟机(VMWare Fusion、Parallels、VirtualBox、KVM/Qemu 等)中重现崩溃,您可以使用虚拟机的模拟串行端口来记录 kprintf 输出。如果设置正确,虚拟以太网端口也倾向于支持内核调试。
于 2017-10-14T14:30:13.453 回答