Debugging — Änderungen 4917 → 5538

Zeile 10: Zeile 10:
 
Ähnlich wie bei der print(f)/cout - Methode kann man auch Daten/ASCII-Strings über die [[Serielle_Schnittstelle | serielle Schnittstelle]] verschicken. Das hat den Vorteil, dass man mehr als nur 25 oder 50 Zeilen zeitgleich betrachten kann.
 
Ähnlich wie bei der print(f)/cout - Methode kann man auch Daten/ASCII-Strings über die [[Serielle_Schnittstelle | serielle Schnittstelle]] verschicken. Das hat den Vorteil, dass man mehr als nur 25 oder 50 Zeilen zeitgleich betrachten kann.
  
−
Bei bochs werden die auf der seriellen Schnittstelle ausgegebenen Daten in eine Textdatei geschrieben, und Qemu kann man mit einem Schalter veranlassen, die serielle Schnittstelle auf stdout oder in eine Datei umzuleiten. Diese kann später ggf. auch von weiteren Tools (z.B. grep) weiterverarbeitet werden.  
+
Bei bochs werden die auf der seriellen Schnittstelle ausgegebenen Daten in eine Textdatei geschrieben, und QEMU kann man mit einem Schalter veranlassen, die serielle Schnittstelle auf stdout oder in eine Datei umzuleiten. Diese kann später ggf. auch von weiteren Tools (z.B. grep) weiterverarbeitet werden.  
  
 
Zudem ist ein Treiber für die [[Serielle_Schnittstelle | serielle Schnittstelle]] sowohl im [[Real_Mode | Real Mode]] als auch im [[Protected_Mode | 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 | serielle Schnittstelle]] sowohl im [[Real_Mode | Real Mode]] als auch im [[Protected_Mode | Protected Mode]] relativ einfach zu schreiben. [[Interrupt | Interrupts]] müssen hierfür nicht verarbeitet werden können.
  
−
== bochs / qemu ==
+
== bochs / QEMU ==
 
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 | bochs]] kann dazu der integrierte Debugger benutzt werden.  
 
Bei [[Bochs | bochs]] kann dazu der integrierte Debugger benutzt werden.  
  
−
[[Qemu | qemu]] stellt keinen eigenen Debugger zur Verfügung, ermöglicht aber eine Verbindung mit einem externen (siehe [[GNU Project Debugger und QEMU]]). Oft braucht man aber in Verbindung mit qemu gar keine komplexen Debug-Funktionen, wenn man nur an die Adresse kommen muss, an der eine Exception auftritt. Denn qemu bietet den -d Parameter um verschiedene Dinge zu loggen. Meist benötigt man ein -d int um alle Interrupts aufzuzeichnen. Dabei muss man aber ein wenig aufpassen, da ältere Versionen von Qemu bei einem Tripplefault keinen Reset auslösen. Das heißt, er schreibt dann lauter GPFs in die Logdatei und diese wird dabei SEHR gross. Man sollte den qemu also möglichst schnell schliessen, sobald ein Triplefault aufgetreten ist.
+
[[QEMU]] stellt keinen eigenen Debugger zur Verfügung, ermöglicht aber eine Verbindung mit einem externen (siehe [[GNU Project Debugger und QEMU]]). Oft braucht man aber in Verbindung mit qemu gar keine komplexen Debug-Funktionen, wenn man nur an die Adresse kommen muss, an der eine Exception auftritt. Denn qemu bietet den -d Parameter um verschiedene Dinge zu loggen. Meist benötigt man ein -d int um alle Interrupts aufzuzeichnen. Dabei muss man aber ein wenig aufpassen, da ältere Versionen von Qemu bei einem Tripplefault keinen Reset auslösen. Das heißt, er schreibt dann lauter GPFs in die Logdatei und diese wird dabei SEHR gross. Man sollte den qemu also möglichst schnell schliessen, sobald ein Triplefault aufgetreten ist.
  
 
== Exception-Meldungen ==
 
== Exception-Meldungen ==