2012-05-10 11 views
5

Ich mache eine OS-Klasse, die auf xv6 basiert und ich schrieb ein Programm, das darauf ausgeführt werden muss.Debuggen von Benutzer-Code auf xv6 mit gdb

Ich weiß, dass ich Kernel-Code mit make qemu-gdb debuggen kann, aber ich bin mir nicht sicher, wie mein eigenes Benutzerprogramm zu debuggen.

Sagen wir, ich möchte cat debuggen, wie würde ich das tun?

Dank

P. S. Gibt es kein xv6-Tag? Sollte diese Frage überhaupt hier sein?

+0

': Datei cat',': break Haupt ',' run' bekommt etwas? – shevski

+0

Okay, jetzt fühle ich mich wirklich dumm, weil ich mir sicher war, dass ich das probiert habe. Aber jetzt denke ich, dass es vielleicht sein könnte, dass ich "load" stattdessen probiert habe. Vielen Dank! Ich habe überall online gesucht, sogar einige Leute per E-Mail, niemand konnte mir das sagen ... (Antwort und ich akzeptiere.) –

Antwort

5

file cat, break main, continue

halbReferenz running and debugging xv6

+0

Die ':' werden nicht benötigt, aber es funktioniert! –

+0

leider vim Notation – shevski

+0

Als ich es versucht, ich brauchte 'Datei _cat zu tun brechen Haupt CONTINUE Dies liegt daran, _cat der Name der Datei auf dem Host Durch die Art und Weise ist dies in der gdb ausgeführt wird Fenster (so haben Sie make qemu-gdb ausgeführt, dann in einem anderen Fenster haben Sie gdb Kernel ausgeführt). –

5

Vom xv6 Top-Level-Verzeichnis:

  1. Führen Sie den Emulator im Debug-Modus (vorausgesetzt, keine X11): make qemu-nox-gdb

  2. In anderen Terminal einfach den Debugger ausführen Laden der Kernel-Symbole mit: gdb kernelDas ist wichtig, sonst wird der Debugger zwischen Kernel und und Anwenderprogramm Symbolen, zum Beispiel main()

  3. Von der GDB-Schnittstelle laufen zu verwechseln: (gdb) target remote localhost:26000 wo 26000 ist die TCP Port, den der Schritt # 1 am Ende meldet (dies könnte sich ändern).

  4. laden Benutzer exec mit (gdb)file user_program

  5. Platz ein Haltepunkt (gdb) break main und weiterhin mit (gdb) continue

  6. etc ...