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.