Systemy wbudowane
Przykład sesji debuggera z odczytem zmiennych lokalnych
gdb-test@dmcslabl:~/gdb-test-example$ gdb ./test (gdb) b div
Breakpoint 1 at 0x4006a3: file main.cpp, linę 5. (gdb) r
Starting program: /home/apiotro/tmp/test
Breakpoint 1, div (al=100) at main.cpp:5
5 int w,c, tab[10] = {0}; (gdb) n
6
(gdb)
for (c = sizeof(tab)/sizeof(tab[0]); tab[c] = al/c;
(gdb) p c $1 = 10 (gdb) disp c 1: c = 10 (gdb) disp al 2: al = 100 (gdb) n 8
2: al = 100 1: c = 10 (gdb)
6
2: al = 100 1: c = 10 (gdb) n 7
2: al = 100
for (c = sizeof(tab)/sizeof(tab[0]);
0; c—) {
tab[c] = al/c;
1: c = 9 (gdb) p c $2 = 9 (gdb) p &c
$3 = (int 1) 0x7fffa9fl95fc (gdb) x &c
0x7fffa9fl95fc: 0x00000009 (gdb) x 0x7fffa9fl95fc 0x7fffa9fl95fc: 0x00000009 (gdb) p 10x7fffa9fl95fc $4 = 9 (gdb)
Ograniczenia analizy aplikacji z użyciem debuggera
Należy pamiętać, że debugger jest narzędziem ingerującym w przebieg wykonania programu dlatego następujące elementy muszą być wzięte pod uwagę podczas analizy zachowania aplikacji:
• debugger przejmuje kontrolę nad wykonywaną aplikacją co znacząco wpływa na szybkość działającego programu dlatego wykonanie analizy efektywności aplikacji jest prakty cznie niemożliwe,
10
testowanie poprawności działania programu skompilowanego z użyciem optymalizacji oferowanych przez kompilator jest możliwa tylko na poziomie języka asemblera,