Jeśli program się wywrócił i utworzył plik core, za pomocą gdb można sprawdzić, w którym miejscu wystąpił błąd. Najpierw uruchamiamy gdb.
$ gdb ekg ~/.ekg2/core.<pid> GNU gdb 5.0 (UI_OUT) Copyright 2000 Free Software Foundation, Inc. (...) #0 command_test_segv (name=0x80617c9 "_segv", params=0x8088c20) at commands.c:1601 1601 return (*foo = 'A'); (gdb)
Od razu widzimy, że błąd wystąpił w funkcji command_test_segv z pliku commands.c. Potem widzimy błędną linię. W niektórych przypadkach niestety to nie wystarcza. Możliwe, że linia, w której wystąpił błąd jest poprawna, ale dostarczone dane nie były właściwe. Wtedy z pomocą przychodzi polecenie bt, które wyświetla stos wywołań funkcji. Widzimy dzięki temu po kolei, jaka funkcja wywoływała jaką funkcję i z jakimi parametrami.
(gdb) bt #0 command_test_segv (name=0x80617c9 "_segv", params=0x8088c20) at commands.c:1601 #1 0x080506e2 in old_execute (target=0x0, line=0x0) at commands.c:2009 #2 0x08050980 in ekg_execute (target=0x0, line=0x806d700 "_segv") at commands.c:2136 #3 0x08059192 in ui_ncurses_loop () at ui-ncurses.c:231 #4 0x080578d8 in main (argc=1, argv=0xbffffb24) at ekg.c:726 #5 0x4008e38f in __libc_start_main () from /lib/libc.so.6
Teraz widzimy, że po prostu użytkownik wywołał komendę _segv. co prawda widać to po samej nazwie funkcji, w której wystąpił błąd, ale w większości przypadków nie będzie to aż tak oczywiste.
Niestety zdarza się i tak, że błędny kod narusza ważne obszary pamięci, a sam błąd występuje później, chociażby przy wywoływaniu funkcji alokacji pamięci. W takich przypadkach zlokalizowanie błędu jest znacznie trudniejsze.