我正在使用虚拟机在 Mac OS X 上进行内核调试,因为它比其他计算机更便宜、更方便。
不幸的是,与 Windows 版本相反,无法使用调试器来停止内核。要停止它,您必须向机器发送不可屏蔽的中断。在物理机器上,您可以在启动时使用正确的调试标志来执行此操作,然后按住两个⌘键并按下电源按钮。但是,此组合键在虚拟机上无法完全实现。
我发现了一个糟糕的剧本暂停虚拟机,编辑暂停状态以指示 NMI 处于待处理状态,然后恢复它,但这看起来像是在浪费时间。
是否可以使用 VMware Fusion 向虚拟机发送不可屏蔽中断?
答案1
可以通过命令给变量的参数设置/添加0x4
位标志,示例如下:debug
boot-args
nvram
sudo nvram boot-args="debug=0x144 kext-dev-mode=1 kcsuffix=development pmuflags=1 -v"
正如所描述的这里,除其他参数外,该debug=0x4
标志允许您在 NMI 上进入调试器。这意味着您可以Command-Option-Control-Shift-Escape
随时按下 VM 并进入调试器(出于某种原因,fn
如果上述组合键不起作用,您可能还需要按下)。
最后,在设置断点、检查内存、打印回溯等之后,您需要输入命令让continue
内核恢复执行。