GDB — Änderungen 8226 → 8255

Zeile 13: Zeile 13:
 
void exceptionHandler(int exception_number, void *exception_address); // wird benötigt um exception-handler einzurichten</c>
 
void exceptionHandler(int exception_number, void *exception_address); // wird benötigt um exception-handler einzurichten</c>
  
−
Zusätzlich wird die ANSI-C-Funktion: ''strcpy'' benötigt. An einigen Stellen im Code noch wird die Funktion ''fprintf'' aufgerufen. Diese sollten auskommentiert oder besser durch Kernel-eigene Äquivalente ersetzt werden.
+
Zusätzlich wird die ANSI-C-Funktion: ''strcpy'' benötigt. An einigen Stellen im Code wird die Funktion ''fprintf'' aufgerufen. Diese sollten auskommentiert oder besser durch Kernel-eigene Äquivalente ersetzt werden.
  
−
Nun muss nur noch eine Verbindung aufgebaut werden. Dazu muss im Kernel die Funktion ''set_debug_traps'' aus der i386-stub.c aufgerufen werden und ein breakpoint gesetzt werden damit der Kernel auf den User, bzw GBD wartet.
+
Nun muss nur noch eine Verbindung aufgebaut werden. Dazu muss im Kernel die Funktion ''set_debug_traps'' aus der i386-stub.c aufgerufen und die RS232-Schnittstelle konfiguriert werden.
−
<c>set_debug_traps(); // i386-stub initialisieren
+
Damit der kernel auch darauf wartet bis der User bzw GDB bereit ist ein wird zuletzt noch ein breakpoint gesetzt.
 +
<c>SetupRS232(baudrate, DATA_BIT_8, NO_PARITY, STOP_BIT_1); //standard-baudrate ist 9600
 +
set_debug_traps(); // i386-stub initialisieren
  
 
asm volatile ("int $3"); // warten bis GDB auf den anderen System gestartet wurde</c>
 
asm volatile ("int $3"); // warten bis GDB auf den anderen System gestartet wurde</c>
 +
 +
Die standard-Baudrate von 9600 ist etwas knapp bemessen. Bei conditional breakpoints in häufig wiederkehrenden Prozessen wird das System extrem stark ausgebremst. Man sollte eine etwas schnellere Übertragungsrate verwenden.
  
 
Auf der kernel-seite ist nun alles Fertig. Jetzt kann man sich ganz einfach mit GDB zu dem Kernel verbinden und ihn debuggen:
 
Auf der kernel-seite ist nun alles Fertig. Jetzt kann man sich ganz einfach mit GDB zu dem Kernel verbinden und ihn debuggen:
−
<code>
+
<code>$ gdb
−
$ gdb
+
(gdb) set remotebaud 115200
 
(gdb) target remote /dev/ttyS0
 
(gdb) target remote /dev/ttyS0
 
</code>
 
</code>