Ich verwende eine virtuelle Maschine zum Kernel-Debuggen unter Mac OS X, da dies günstiger und praktischer ist als ein anderer Computer.
Leider ist es im Gegensatz zum Windows-Äquivalent nicht möglich, den Kernel mit dem Debugger anzuhalten. Um ihn anzuhalten, müssen Sie der Maschine einen nicht maskierbaren Interrupt senden. Auf einer physischen Maschine können Sie das tun, indem Sie beim Booten die richtigen Debug-Flags setzen und dann beide ⌘Tasten gedrückt halten, während Sie den Einschaltknopf drücken. Auf einer virtuellen Maschine lässt sich diese Tastenkombination jedoch nicht ganz realisieren.
Ich habe einen ... gefundenschlampiges SkriptDadurch wird die virtuelle Maschine angehalten, der angehaltene Zustand wird bearbeitet, um anzuzeigen, dass ein NMI aussteht, und die Maschine wird dann fortgesetzt. Dies scheint jedoch reine Zeitverschwendung zu sein.
Ist es möglich, mit VMware Fusion einen nicht maskierbaren Interrupt an eine virtuelle Maschine zu senden?
Antwort1
0x4
Sie können das Bit-Flag über den Befehl zum debug
Argument der boot-args
Variablen setzen/hinzufügen nvram
. Hier ist ein Beispiel:
sudo nvram boot-args="debug=0x144 kext-dev-mode=1 kcsuffix=development pmuflags=1 -v"
Wie beschriebenHier, neben den anderen Argumenten debug=0x4
ermöglicht Ihnen das Flag, in den Debugger auf NMI zu wechseln. Das bedeutet, dass Sie Command-Option-Control-Shift-Escape
auf Ihrer VM drücken und jederzeit in den Debugger wechseln können (aus irgendeinem Grund müssen Sie möglicherweise auch drücken, fn
wenn die oben erwähnte Tastenkombination nicht funktioniert).
Schließlich müssen Sie, nachdem Sie Haltepunkte gesetzt, den Speicher überprüft, einen Backtrace gedruckt usw. haben, etwas eingeben, continue
damit der Kernel die Ausführung fortsetzt.