Usare gdb e bochs

Bene chi sviluppa OS sa che la parte piu difficile e scomoda e’ quella relatiava al debugging. Soprattutto per la difficolta’ di tracciare l’esecuzione del programma. In un articolo precedente vi ho spiegato come sfruttare il debugger interno di bochs, questa volta vediamo come utilizzare gdb per fare debugging da remoto.

Quindi quello che ci serve sono:

  • gdb installato
  • Il pacchetto di bochs scaricato da sorgenti (questo perche’ difficilmente i pacchetti precompilati dei vari package manager abilitano questa opzione)

Quindi se non lo avete fatto andate su bochs.sourceforge.net e scaricate una versione di bochs.

Scompattate il file con il comando:

tar xf bochs-xxx-yy.tar.gz

e portatevi nella cartella appena creata. Passiamo ora alla configurazione del programma, per abilitare il debugging remoto per gdb dobbiamo specificarlo in fase di invocazione del ./configure. Il parametro da passare e’ –enable-gdb-stub. Nel mio caso ho usato:

./configure --with-x11 --with-wx --enable-ne2000 --enable-gdb-stub
 --enable-disasm --enable-e1000 --enable-usb --enable-pci

Dove:

  • –with-x11 e –with-wx  si utilizzano per identificare le librerie grafiche e in particolare per le finestre di usare le wxwidgers.
  • –enable-disasm abilita il disassembler interno di bochs
  • –enable-usb abilita il supporto usb sull’emulatore
  • –enable-pci abilita appunto il pci, necessario comunque dal momento che abilitiamo ne2000, usb etc.
  • –enable-gdb-stub come dicevamo abilita invece il supporto al debug remoto di gdb.

Una volta portata a termine la fase di configurazione possiamo procedere con la compilazione, dando il classico:

make

e se poi volete potete dare

make install

(io personalmente non l’ho fatto).

A questo punto abbiamo terminato la fase di installazione di bochs. Se non lo avete fatto installate  ora anche gdb.

Ricordo che eventualmente, se trovate problemi con la mancaza dei file relativi ai BIOS  (grafico e non) controllate nel file di configurazione .bochsrc path nei campi:

  • romimage
  • vga

Questi files si trovano nella cartella bios dei sorgenti di bochs (se avete fatto make install probabilmente stanno /usr/share/bochs).

Ora dobbiamo aggiungere la seguente linea al file .bochsrc:

gdbstub: enabled=1,port=1234, text_base=0, data_base=0, bss_base=0

Ricordiamoci di compilare il nostro sistema operativo con il supporto per il debug, il parametro da aggiungere e’ -g.

A questo punto se lanciate bochs, e fate partire l’emulazione vedrete che il programma si blocca senza proseguire. Questo perche’ ora si aspetta la connessione di un emulatore. Quindi da un terminale apriamo gdb con il comando:

gdb

ora dalla shell del programma prima di tutto dobbiamo collegarci a bochs (si tratta di un’architettura client server), la porta di default dove si mette in ascolto l’emulatore e’ la 1234,  quindi diamo il comando:

target remote localhost:1234

In questo modo siamo collegati al sistema emulato. Possiamo gia proseguire nell’emulazione, ma in questo modo gdb ancora non conosce i nomi delle funzioni, e quindi ancora non sarebbe utile. Utilizziamo il comando symbol-file per caricare il file dei simboli che istruiscono il debugger come individuare i vari nomi.

Normalmente nel caso del vostro os il file img compilato dovrebbe contenere le informazioni necessarie, quindi vi bastera’ dare il comando:

symbol-file nomefile.img

(normalmente il file ottenuto dopo la fase di linking).

Da questo punto se non ci sono errori siamo in grado di debuggare il nostro os tramite la shell gdb. Ecco brevemente alcuni comandi utili:

  • continue – Riprende/lancia l’esecuzione da dove ci si era fermati
  • break nomefunzione – (oppure nomefile:numerolinea) setta un breakpoint
  • next – Avanza di una istruzione
  • print nomevariabile – Stampa il contenuto di una variabile
  • step – simile a next
  • info break – Stampa una lista di tutti i breakpoint
  • delete breakpoint XY – Elimina il breakpoint identificato dal numero XY (il numero si ottiene dalla lista precedente)
Ovviamente la lista di comandi di gdb e’ molto ampia, quindi vi rimando alle guide ufficiali del programma per una panoramica piu completa. Ma questi  gia sono un buon punto di partenza per iniziare a lavorare. Quindi buon divertimento con l’accoppiata bochs e gdb.

 

 

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *