Systemy wbudowane
gdb-test0dmcslabl:~/gdb-test-example$ gdb ./test GNU gdb 6.8-debian
Copyright (C) 2008 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later chttp://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying" and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu"... (gdb)
Debueser oczekuje na polecenia od użytkownika. Program zostaje uruchomiony w trybie ciągłym za pomocą polecenia run Irl.
(gdb) r
Starting program: /home/gdb-test/gdb-test-example/test
Program received signal SIGFPE, Arithmetic exception.
0x00000000004006e5 in div (al=100) at main.cpp:7 7 tab[c] = al/c;
(gdb)
Uruchomienie program w trybie ciągłym skutkuje zakończeniem działania z powodu natrafienia na blad krytyczny. Wyświetlona została dodatkowa informacja o lokalizacji instrukcji powodującej błąd - plik main.cpp linia 7. Polecenie list fil umożliwia wyświetlenie kodu źródłowego programu.
(gdb) 1
2
3 int div(int al)
4 {
5 int w,c, tab[10] = (0);
6 for (c = sizeof(tab)/sizeof(tab[0]); c >= 0; c—){
7 tab[c] = al/c;
8 w += tab[c];
9 )
10 return w;
11 )
(gdb)
Za pomocą polecenia break fbl main.cpp:7 if c == 0 umieszczany jest punkt przerwania iv Unii generującej blad Następnie program jest uruchamiany od początku za pomocą polecenia run frl (gdb) b main.cpp:? if c ==0
Breakpoint 1 at 0x4006d4: file main.cpp, linę 7.
(gdb) r
The program being debugged has been started already.
Start it from the beginning? (y or n) y
Starting program: home/gdb-test/gdb-test-example/test
Breakpoint 1, div (al=100) at main.cpp:7 7 tab[c] = al/c;
(gdb)
Teraz możliwe iesl przeanalizowanie stanu poszczególnych zmiennych za pomocą polecenia prinl I pl i zlokalizowanie źródła bledu.
(gdb) p c $3 = 0 (gdb) pal $4 = 100 (gdb) p w $5 = 301 (gdb)
9