Autor Thema: Debbuging auf realer Hardware  (Gelesen 3427 mal)

OsDevNewbie

  • Beiträge: 282
    • Profil anzeigen
    • YourOS Kernel
Gespeichert
« am: 24. March 2015, 17:10 »
Hallo,
ich möchte hier mal vorstellen, wie ich auf echter Hardware debugge.
Ich habe mir dazu einen kleinen Debugger in den Kernel eingebaut, der ähnlich aussieht, wie der von Bochs. Er unterstützt folgende Befehle:
  • s: Singlestep
  • c: Ausführung fortsetzen, bis zum nächsten Breakpoint
  • lb: Breakpoint setzen
  • d: Breakpoint löschen
  • info b: Breakpoints anzeigen
  • x: Inhalt an einer bestimmten Adresse anzeigen

Zusätzlich wird bei einer Exception auch der Debugger aufgerufen. Für den Debugger wird der Debuginterrupt (int 1) benutzt. Der Debugger wird dabei wie ein Task behandelt. Beim Debuginterrupt wird einfach ein Taskswitch vorgenommen. Dies ist notwendig, damit Interrupts aktiviert sind.
Ich hatte es mal anders ausprobiert und die Interrupts im Handler aktiviert, aber das hat nicht funktioniert.
Um Breakpoints zu setzen, werden die Debugregister der CPU verwendet. Der Singlestep wird durch ein Flag im Flagregister realisiert.
Was ich noch einbauen möchte ist ein Disassembler. Ich habe aber keinen gefunden und deshalb begonnen selber einen zu schreiben. Er ist aber noch nicht funktionstüchtig. Vielleicht kennt ja einer von euch einen opensource Disassembler.

Wenn ihr euch mal meinen Debugger anschauen möchtet, so könnt ihr das hier tun. Momentan wird einfach nur ein Breakpoint unterstützt. Wie der Interrupthandler aufgebaut ist könnt ihr hier (Zeile 200) einsehen.

Wie debugged ihr auf echter Hardware?
Ich hoffe ich konnte euch einen Lösungsvorschlag geben.

P.S.: Der Debugger hat manchmal seine Problemchen (z.B. wenn man über den x-Befehl auf eine Speicherstelle zugreift, die nicht gemappt ist, dann gibt es einen Page Fault und dann muss man neustarten) also sollte man aufpassen was man macht. Und ich habe ihn bissher auch nur für Kerneldebugging eingesetzt also weiss ich nicht, ob man damit auch Tasks debuggen könnte. Theoretisch sollte es aber möglich sein.
Viele Grüsse
OsDevNewbie

Ein Computer ohne Betriebsystem ist nicht mehr wert als ein Haufen Schrott.
Ein Computer ist eine Maschine, die einem Lebewesen das kostbarste klaut, was sie selber nicht hat:
DIE ZEIT DES LEBENS

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 24. March 2015, 23:40 »
Cool, haben will! :)

Ich wollte ja schon lang einen Kernel-Debugger für tyndur haben, aber irgendwie war es dann nie dringend genug, um tatsächlich einen zu bauen. Auf echter Hardware debugge ich mehr oder weniger nur mit printf und Exceptionmeldungen.
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

 

Einloggen