在运行 OS X 10.12 的并行 VM 上显示内核打印输出中的指针值(而不是 <ptr>)
Show pointer value in kernel printouts (instead of <ptr>) on parallels VM that runs OS X 10.12
我正在开发在 10.12.4 VM 下运行的 Kext(我使用并行)并且我想启用指针打印输出(目前所有指针都被隐藏并显示在 /var/log/system.log
上作为 <ptr>
)
在 10.12 之前,可以通过设置 nvram csr-active-config=%ff%00%00%00
直接取消调试限制。但是,现在无法直接设置 csr-active-config
而是通过恢复模式中的 csrutil disable
设置。不幸的是,它并没有禁用所有 SIP 功能并且指针仍然隐藏。
幸运的是,以下 thread 提供了解决方法:
Alternatively, CSR can be disabled entirely by setting csr-active-config=ff%00%00%00. For a VM this can be achieved by booting to the Recovery partition, running csrutil clear to delete the csr-active-config variable entirely and nvram Xsr-active-config=ff%00%00%00. Then shutdown the VM, and use a hex editor to change X -> c in the nvram file. This will allow the -show_pointers boot-arg to work.
我正在使用 Parallels,我试图找到 nvram 设置的位置。我看到了名为 NVRAM.dat
的有前途的文件,但不幸的是
在按照上面引用的段落中的说明进行操作后,我无法跟踪字符串 Xsr-active-config
。
也许 nvram 设置还有其他地方?
谢谢
我没有 直接 回答你的问题,但我有一个解决方法:kprintf()
串行日志的输出是 未 指针清理。因此,如果您在调试引导参数中启用 kprintf 标志,则激活一个虚拟串行端口,该端口写入 VM 设置中的主机文件,并将您的日志记录从 printf
/IOLog
更改为 kprintf
, 您可以将原始日志记录到您的串口文件中。
我发现 kprintf()
日志记录机制在其他方面也比内核 syslog 更有帮助 - 它可以在紧急情况下正常工作,它不受速率限制,而且噪音较小。缺点是如果你记录很多,它会对性能产生明显的影响。
在调试器中将 doprnt_hide_pointers 更改为 false
我正在开发在 10.12.4 VM 下运行的 Kext(我使用并行)并且我想启用指针打印输出(目前所有指针都被隐藏并显示在 /var/log/system.log
上作为 <ptr>
)
在 10.12 之前,可以通过设置 nvram csr-active-config=%ff%00%00%00
直接取消调试限制。但是,现在无法直接设置 csr-active-config
而是通过恢复模式中的 csrutil disable
设置。不幸的是,它并没有禁用所有 SIP 功能并且指针仍然隐藏。
幸运的是,以下 thread 提供了解决方法:
Alternatively, CSR can be disabled entirely by setting csr-active-config=ff%00%00%00. For a VM this can be achieved by booting to the Recovery partition, running csrutil clear to delete the csr-active-config variable entirely and nvram Xsr-active-config=ff%00%00%00. Then shutdown the VM, and use a hex editor to change X -> c in the nvram file. This will allow the -show_pointers boot-arg to work.
我正在使用 Parallels,我试图找到 nvram 设置的位置。我看到了名为 NVRAM.dat
的有前途的文件,但不幸的是
在按照上面引用的段落中的说明进行操作后,我无法跟踪字符串 Xsr-active-config
。
也许 nvram 设置还有其他地方?
谢谢
我没有 直接 回答你的问题,但我有一个解决方法:kprintf()
串行日志的输出是 未 指针清理。因此,如果您在调试引导参数中启用 kprintf 标志,则激活一个虚拟串行端口,该端口写入 VM 设置中的主机文件,并将您的日志记录从 printf
/IOLog
更改为 kprintf
, 您可以将原始日志记录到您的串口文件中。
我发现 kprintf()
日志记录机制在其他方面也比内核 syslog 更有帮助 - 它可以在紧急情况下正常工作,它不受速率限制,而且噪音较小。缺点是如果你记录很多,它会对性能产生明显的影响。
在调试器中将 doprnt_hide_pointers 更改为 false