Nella sessione di esempio, userò il carattere ## per indicare un
commento che non fa parte della sessione stessa.
##compiliamo il nostro
file a dovere:
cyberspace.org:~$ make
gcc -g -c -Wall main.c
gcc -g -c -Wall token.c
gcc -g -o matrix main.o token.o
## avviamo il gdb
cyberspace.org:~$ gdb matrix
GNU gdb 4.18
Copyright 1998 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License,
and you are
welcome to change it and/or distribute copies of it under
certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show
warranty" for details.
This GDB was configured as "i686-pc-linux-gnu"...
##
## impostiamo un breakpoint alla linea 23
(gdb) break 23
Breakpoint 1 at 0x8048478: file main.c, line 23.
##
## eseguiamo il programma fino alla linea 23.
(gdb) run
Starting program: /home/gzoppi/last/matrix
Breakpoint 1, main () at main.c:24
24 int main (void) {
## Andiamo avanti con l'esecuzione passo dopo passo
(gdb) step
main () at main.c:30
30 do {
## Andiamo avanti con l'esecuzione passo dopo passo
(gdb) step
31 dim=0;
## Andiamo avanti con l'esecuzione passo dopo passo
(gdb) step
32 input=NULL;
# Stampiamo il valore della variabile dim
(gdb) print dim
$1 = 0
## Impostiamo un watchpoint sulla variabile dim.
(gdb) watch dim
Hardware watchpoint 2: dim
## Continuiamo l'esecuzione fino al prossimo watchpoint
(gdb) continue
Continuing.
#0 main () at main.c:32
32 input=NULL;
Hardware watchpoint 2: dim
## Qui viene modificato il valore della dim e si verifica
un watchpoint
Old value = 0
New value = 120
0x4006969f in getdelim () from /lib/libc.so.6
## Guardiamo cosa
c'é nello stack
(gdb) backtrace
#0 0x4006969f in getdelim () from /lib/libc.so.6
#1 0x40068a18 in getline () from /lib/libc.so.6
#2 0x80484a1 in main () at main.c:33
## Continuiamo l'esecuzione fino alla fine della funzione getdelim,
chiamata internamente dalla getline, usata nel nostro programma.
(gdb) finish
Run till exit from #0 0x4006969f in getdelim () from /lib/libc.so.6
#0 0x4006969f in getdelim () from /lib/libc.so.6
0x40068a18 in getline () from /lib/libc.so.6
## Visualizziamo tutte le informazioni relative ai nostri
watchpoint
(gdb) info watch
Num Type Disp Enb Address What
1 breakpoint keep y 0x08048478 in main at main.c:23
breakpoint already hit 1 time
2 hw watchpoint keep y dim
## Visualizziamo il sorgente
(gdb) list
27 char *input;
28 int dim,size;
29
30 do {
31 dim=0;
32 input=NULL;
33 size=getline(&input,&dim,stdin);
34 stop=reserved_token(input,size);
35 } while (stop!=QUIT);
36 return EXIT_SUCCESS;
## disabilitiamo
il breakpoint 2 (che é un watchpoint)
(gdb) disable 2
## ancora passo-passo
(gdb) step
Single stepping until exit from function getline,
which has no line number information.
main () at main.c:34
34 stop=reserved_token(input,size);
(gdb) step
reserved_token (stringa=0x80499c8 "LUIGI\n", dimensione=6)
at token.c:24
24 char *tkn;
## Guardiamo i sorgenti della sottofunzione
(gdb) list
19 else return ID;
20 }
21
22 keyword reserved_token (char *stringa, int dimensione)
{
23
24 char *tkn;
25 char *running;
26
27 keyword token;
28
#finiamo la sottofunzione
(gdb) finish
Run till exit from #0 reserved_token (stringa=0x80499c8
"LUIGI\n",
dimensione=6) at token.c:24
0x80484b6 in main () at main.c:34
34 stop=reserved_token(input,size);
Value returned is $2 = EMPTY
## Continuo dopo...e quindi faccio quit per uscire
(gdb) quit
The program is running. Exit anyway? (y or n)
Torna all'indice Generale del corso di Corso di C con Linux di Software Planet