Sierra 上的 kprintf(内核 printf)日志在哪里?
Where is the kprintf (kernel printf) log on Sierra?
有很多页面解释它,但我找不到。我找到的许多文章仅适用于 El Capitan 和旧系统。
我现在无法使用 fwkpfv,因为我没有合适的加密狗。我的客户给我买了一台支持火线的二手 MacBook。
我的内核扩展使我的机器崩溃。奇怪的是,如果我的同事构建我的扩展,它工作得很好。我仍然一头雾水。
您可以使用命令"live"获取本地内核日志
log stream --process 0
要查看过去的日志,请改用 log show
,例如:
log show --predicate 'processID == 0' --last 1h | less
None 将对您解决内核恐慌有很大帮助,但是,由于日志记录在用户 space 中异步发生,因此您不会收到恐慌前的最后消息。
还有一些不用火线调试 KP 的选项,您可能已经知道,但为了完整起见,我会提及它们:
- 基于以太网的内核调试(相对于火线)。只有测试设备需要 wired/thunderbolt 以太网,Mac 运行 调试器可以在 wifi 上。
- 您通常可以从 panic 日志本身中提取大量信息:除了符号化堆栈(使用
keepsyms=1
boot-arg 这样您就不必追溯执行),查看寄存器内容和反汇编通常可以告诉你变量的值。
- 如果您缺少部分 Apple 代码堆栈跟踪,运行 调试或开发内核而不是发布内核。这些是在启用较少优化的情况下构建的,因此函数不太可能被内联等。
- 您可以在内核中打开大量内存调试和其他诊断选项,例如
-zp
、-zc
等等。
- 如果您可以在 VM(VMWare Fusion、Parallels、VirtualBox、KVM/Qemu 等)中重现崩溃,则可以使用 VM 的模拟串行端口来记录 kprintf 输出。如果设置正确,虚拟以太网端口也倾向于支持内核调试。
有很多页面解释它,但我找不到。我找到的许多文章仅适用于 El Capitan 和旧系统。
我现在无法使用 fwkpfv,因为我没有合适的加密狗。我的客户给我买了一台支持火线的二手 MacBook。
我的内核扩展使我的机器崩溃。奇怪的是,如果我的同事构建我的扩展,它工作得很好。我仍然一头雾水。
您可以使用命令"live"获取本地内核日志
log stream --process 0
要查看过去的日志,请改用 log show
,例如:
log show --predicate 'processID == 0' --last 1h | less
None 将对您解决内核恐慌有很大帮助,但是,由于日志记录在用户 space 中异步发生,因此您不会收到恐慌前的最后消息。
还有一些不用火线调试 KP 的选项,您可能已经知道,但为了完整起见,我会提及它们:
- 基于以太网的内核调试(相对于火线)。只有测试设备需要 wired/thunderbolt 以太网,Mac 运行 调试器可以在 wifi 上。
- 您通常可以从 panic 日志本身中提取大量信息:除了符号化堆栈(使用
keepsyms=1
boot-arg 这样您就不必追溯执行),查看寄存器内容和反汇编通常可以告诉你变量的值。 - 如果您缺少部分 Apple 代码堆栈跟踪,运行 调试或开发内核而不是发布内核。这些是在启用较少优化的情况下构建的,因此函数不太可能被内联等。
- 您可以在内核中打开大量内存调试和其他诊断选项,例如
-zp
、-zc
等等。 - 如果您可以在 VM(VMWare Fusion、Parallels、VirtualBox、KVM/Qemu 等)中重现崩溃,则可以使用 VM 的模拟串行端口来记录 kprintf 输出。如果设置正确,虚拟以太网端口也倾向于支持内核调试。