我在Setting Up Kernel Debugging找到的说明就是我过去所做的。在运行我要调试的kext的机器上,我看到消息“连接到远程调试器”。在我正在运行gdb的机器上,我看到:
(gdb) kdp-reattach localhost
Connected.
问题是'showallkmods'返回一个空列表,其他类似命令似乎都没有工作:
(gdb) showallkmods
kmod address size id refs version name
(gdb) showalltasks
task vm_map ipc_space #acts pid process io_policy wq_state command
Invalid type combination in equality test.
(gdb) showregistry
Please load kgmacros after KDP attaching to the target.
(gdb) source /Volumes/KernelDebugKit/kgmacros
Loading Kernel GDB Macros package. Type "help kgm" for more info.
(gdb) showallkmods
kmod address size id refs version name
(gdb) showregistry
Please load kgmacros after KDP attaching to the target.
(gdb) showbootargs
Invalid cast.
我正在运行10.6.8并且正在使用kernel_debug_kit_10.6.8_10k540.dmg
我不确定可能需要哪些其他细节来诊断出错的地方,但如果您想在评论中提问,我当然可以尝试提供其他详细信息。
答案 0 :(得分:1)
错误“Invalid type combination in equality test.
”向我表明gdb可能期望与您正在连接的内核运行的CPU架构不同。 10.6内核存在于32位和64位变体中,默认情况下,它由硬件决定加载哪一个。如果你的CPU支持它,gdb通常默认为x86_64(除了早期基于Core Duo的所有版本以外的所有Intel Mac),所以如果你要连接到32位内核(在2011年之前发布的大多数Mac上的默认设置),你需要启动gdb时传递-arch i386
参数。您可以通过运行uname -a
命令来检查当前的内核CPU体系结构。
更新:,内核始终以64位(x86_64)模式运行。在OSX Lion 上,内核在运行 Mountain Lion 的功能的Mac上默认为64位模式,否则为32位模式。