代码之家  ›  专栏  ›  技术社区  ›  Mike Crawford

Sierra上的kprintf(内核printf)日志在哪里?

  •  1
  • Mike Crawford  · 技术社区  · 7 年前

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

    我的内核扩展使我的箱子陷入恐慌。奇怪的是,如果我的同事构建了我的扩展,它就可以正常工作。我仍然很困惑。

    1 回复  |  直到 7 年前
        1
  •  4
  •   pmdj    7 年前

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

    log stream --process 0
    

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

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

    还有几个没有firewire的KPs调试选项,您可能已经知道了,但为了完整起见,我将提及它们:

    • 基于以太网的内核调试(与firewire相反)。只有测试设备需要有线/霹雳以太网,运行调试器的Mac可以在wifi上。
    • 您通常可以从紧急日志本身提取大量信息:除了对堆栈进行符号化(使用 keepsyms=1 引导arg,这样您就不必追溯),查看寄存器内容和反汇编通常可以告诉您变量的值。
    • 如果你遗漏了苹果的部分代码——堆栈跟踪,那就运行一个调试或开发内核,而不是发行版。这些都是在启用较少优化的情况下构建的,因此函数不太可能内联等。
    • 您可以在内核中打开一系列内存调试和其他诊断选项,例如。 -zp , -zc 等等
    • 如果可以在虚拟机中重新设置崩溃(VMWare Fusion、Parallels、VirtualBox、KVM/Qemu等等),则可以使用虚拟机的模拟串行端口记录kprintf输出。如果设置正确,虚拟以太网端口也倾向于支持内核调试。