我想用它来调试内核驱动程序,但我会尽量避免向所有函数添加日志记录。OSReportWithBacktrace 似乎工作,但我需要符号。
问问题
453 次
1 回答
1
我不知道直接从 kext 打印符号化堆栈跟踪的方法。您可以通过添加到nvram 变量来获得符号化的恐慌日志。我怀疑此数据结构具有私有链接,因此您可能无法在自己的 kext 中复制符号化的恐慌代码。(如果您想尝试,它在 xnu 源中。)keepsyms=1
boot-args
osfmk/i386/AT386/model_dep.c
您的另一个选择是OSReportWithBacktrace
通过atos
命令行工具发送输出。对于 kext 符号,您需要从中找到 kext 的加载地址kextstat
并将其传递给 -l
命令行参数。
最后,当然可以使用 lldb 内核调试来获取堆栈跟踪。如果您需要在早期 kext 加载期间设置断点,在您有机会从 lldb 命令行执行此操作之前,您可以__asm__("int $3")
在代码中要中断调试器的位置插入 (IIRC)。
于 2017-06-22T11:53:20.877 回答