52. Debugging II

Debugger können auch laufende Programme beobachten und sie an Stellen (Breakpoints) unterbrechen, an denen man nachsehen möchte, was passiert:

examples> gdb crash
GNU gdb 5.1
...
(gdb) set args dab bad abd
(gdb) break list_deleteAt
Breakpoint 1 at 0x8048892: file liste.c, line 108.
(gdb) run
Starting program: examples/crash dab bad abd
abd

Breakpoint 1, list_deleteAt (l=0x8049e90, index=0)
at liste.c:108
108       if (index==0) {
(gdb)

An dieser Stelle kann man sich “in Zeitlupe” ansehen, was passiert:

(gdb) step
109         toDel = l->first;
(gdb) print toDel
$1 = (Node *) 0x400164a8
(gdb) step
110         l->first = toDel->next;
(gdb) print toDel->next
$2 = (struct Node_s *) 0x8049ed0
(gdb) print toDel->next->cont
$3 = 0x8049ec0 "bad"

Insbesondere beim Debuggen können grafische Benutzeroberflächen hilfreich sein. Ein besonders nettes Frontend zum gdb heißt ddd:

Entsprechende Programme existieren auch unter Windows oder MacOS – häufig bereits in IDEs integriert. Auch wenn manche Dinge anders aussehen, die prinzipiellen Elemente sind ähnlich. Coredumps und das damit verbundene “post-mortem-debugging” sind allerdings außerhalb der Unix-Welt nicht so üblich.


Markus Demleitner

Copyright Notice