1
我想用它來調試內核驅動程序,但我會盡量避免將日誌記錄添加到所有功能。 OSReportWithBacktrace似乎工作,但我需要符號。有沒有辦法使用OSX上的kext中的符號記錄堆棧跟蹤?
我想用它來調試內核驅動程序,但我會盡量避免將日誌記錄添加到所有功能。 OSReportWithBacktrace似乎工作,但我需要符號。有沒有辦法使用OSX上的kext中的符號記錄堆棧跟蹤?
我不知道如何直接從kext打印符號化堆棧跟蹤。通過將keepsyms=1
添加到boot-args
nvram變量,您可以獲得符號化的恐慌日誌。我懷疑這個數據結構有私人鏈接,所以你可能無法在你自己的kext中複製符號化的恐慌代碼。 (這是在XNU源的osfmk/i386/AT386/model_dep.c
但如果你想嘗試。)
你的另一個選擇是通過atos
命令行工具從OSReportWithBacktrace
發送輸出。對於kext符號,您需要從kextstat
中找到kext的加載地址,並將其傳遞給-l
命令行參數。
最後,您當然可以使用lldb內核調試來獲取堆棧跟蹤。如果您需要在早期kext加載期間設置斷點,則在您有機會從lldb命令行執行該操作之前,可以在代碼中要插入調試程序的位置插入__asm__("int $3")
(IIRC)。