Lowlevel

Lowlevel => Lowlevel-Coding => Thema gestartet von: OsDevNewbie am 24. March 2015, 17:10

Titel: Debbuging auf realer Hardware
Beitrag von: OsDevNewbie 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:

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 (https://github.com/Gurgel100/Kernel/blob/develop/util/debug.c) tun. Momentan wird einfach nur ein Breakpoint unterstützt. Wie der Interrupthandler aufgebaut ist könnt ihr hier (Zeile 200) (https://github.com/Gurgel100/Kernel/blob/develop/isr.c) 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.
Titel: Re: Debbuging auf realer Hardware
Beitrag von: kevin 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.