13.7.2 Debugging
13.7.2.1 Debugging con gdb
Preparazione:
# apt-get install gdb
Riferimenti per gdb
:
Per il debugging di un programma compilato con l'opzione -g, usate
gdb
. Molti comandi possono essere abbreviati. L'espansione del
comando mediante tab funziona come per la shell.
$ gdb program
(gdb) b 1 # imposta il punto di interruzione alla riga 1
(gdb) run arg1 arg2 arg3 # lancia il programma
(gdb) next # riga successiva
...
(gdb) step # un passo avanti
...
(gdb) p parm # stampa parm
...
(gdb) p parm=12 # imposta il valore di parm a 12
Per il debugging da emacs, fate riferimento a Riassunto dei comandi (Emacs e Vim), Sezione
11.3.4.
Dato che tutti i binari installati devono essere adattati al sistema Debian in
maniera predefinita, gran parte dei simboli di debug sono stati rimossi. Per
rendere gdb
utile per il debug dei pacchetti Debian, i pacchetti
pertinenti devono essere ricompilati con la cura seguente:
-
Modificate debian/control
per eliminare il pacchetto version
.
-
Controllate gli script di compilazione ed assicuratevi che usino
CFLAGS=-g -Wall per compilare i binari.
-
Esportate DEB_BUILD_OPTIONS=nostrip,noopt per compilare il
pacchetto Debian.
Vedere Policy
10.1
per maggiori informazioni.
13.7.2.2 Controllo delle dipendenze dalle librerie
Usate ldd
per scoprire da quali librerie dipende un programma:
$ ldd /bin/ls
librt.so.1 => /lib/librt.so.1 (0x4001e000)
libc.so.6 => /lib/libc.so.6 (0x40030000)
libpthread.so.0 => /lib/libpthread.so.0 (0x40153000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
Affinch� ls
funzioni in un ambiente chroot
le
librerie di cui sopra devono essere disponibili all'interno di esso.
Utili anche i seguenti comandi:
13.7.2.3 Debugging con gli strumenti per scoprire i memory leak
Parecchi sono gli strumenti per il riconoscimento dei memory leak in Debian.
-
njamd
-
valgrind
-
dmalloc
-
electric-fence
-
memprof
-
memwatch
(non � impacchettato, prendetelo da memwatch
.)
-
mpatrol
-
leaktracer
-
libgc6
-
Insure++ da Parasoft
. (non-free, commerciale, a
pagamento)
Vedere anche Debugging
Tools for Dynamic Storage Allocation and Memory Management
.