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