Debugging — Änderungen 9438 → 11256

Zeile 14: Zeile 14:
 
Zudem ist ein Treiber für die serielle Schnittstelle sowohl im [[Real Mode]] als auch im [[Protected Mode]] relativ einfach zu schreiben. [[Interrupt | Interrupts]] müssen hierfür nicht verarbeitet werden können.
 
Zudem ist ein Treiber für die serielle Schnittstelle sowohl im [[Real Mode]] als auch im [[Protected Mode]] relativ einfach zu schreiben. [[Interrupt | Interrupts]] müssen hierfür nicht verarbeitet werden können.
  
−
== bochs / QEMU ==
+
== bochs / QEMU / VirtualBox ==
 
Falls man mit Fehlern wie Pagefaults, GPFs oder anderen Exceptions kämpft, ist es wichtig, die Registerinhalte vor der Exception zu kennen. Um an diese zu kommen, sind Debug-Funktionen in den Emulatoren ein wertvolles Werkzeug.
 
Falls man mit Fehlern wie Pagefaults, GPFs oder anderen Exceptions kämpft, ist es wichtig, die Registerinhalte vor der Exception zu kennen. Um an diese zu kommen, sind Debug-Funktionen in den Emulatoren ein wertvolles Werkzeug.
  
−
Bei bochs kann dazu der [[Bochs Debugger|integrierte Debugger]] benutzt werden.  
+
Bei [[Bochs Debugger|bochs]] und [[VirtualBox]] kann dazu der integrierte Debugger benutzt werden. Diese beiden Emulatoren bieten weiterhin ein Log in der Konsole (Bochs) bzw. über die Debug-Funktionen (VirtualBox), dass unter Umständen wichtige Informationen über fehlerhafte Harwareansteuerung liefert.
  
 
QEMU stellt keinen eigenen Debugger zur Verfügung, ermöglicht aber eine Verbindung mit einem externen, wie z. B. dem GNU Debugger. Dies ist mit der Option „-s“ möglich, dazu sollte man „-S“ verwenden, da das emulierte OS sonst sofort startet. Verwendet wird TCP-Port 1234. Um den GDB anzuhängen, startet man GDB mit dem Kernel-Binary, also z. B. „''gdb bin/kernel.bin''“. Darauf gibt man auf der GDB-Kommandozeile „''target remote :1234''“ ein, um GDB mit QEMU zu verbinden. Ein „''cont''“ führt die Ausführung fort. Breakpoints können mit „''break datei:zeile''“ gesetzt werden, können aber auch auf Funktionen („''break _foo''“) gesetzt werden.
 
QEMU stellt keinen eigenen Debugger zur Verfügung, ermöglicht aber eine Verbindung mit einem externen, wie z. B. dem GNU Debugger. Dies ist mit der Option „-s“ möglich, dazu sollte man „-S“ verwenden, da das emulierte OS sonst sofort startet. Verwendet wird TCP-Port 1234. Um den GDB anzuhängen, startet man GDB mit dem Kernel-Binary, also z. B. „''gdb bin/kernel.bin''“. Darauf gibt man auf der GDB-Kommandozeile „''target remote :1234''“ ein, um GDB mit QEMU zu verbinden. Ein „''cont''“ führt die Ausführung fort. Breakpoints können mit „''break datei:zeile''“ gesetzt werden, können aber auch auf Funktionen („''break _foo''“) gesetzt werden.