Identyfikacja przyczyny awarii Odnalezienie przyczyny awarii odbywa się zazwyczaj poprzez obserwację stanu programu podczas jego kontrolowanego uruchomienia. Do śledzenia wykorzystuje się zwykle specjalnie przygotowaną wersję programu. W przeciwieństwie do wersji udostępnianej klientom, debugowany program nie jest zaciemniony, sprawdza asercje oraz loguje najważniejsze zdarzenia i działania. Wykonanie programu można nadzorować przy pomocy debuggera, który umożliwia wstrzymywanie wykonania procesu oraz obserwację i modyfikację jego stanu. Ponadto, środowisko uruchomienia można wzbogacić o biblioteki, które dokonują ściślejszej kontroli dostępu do pamięci oraz śledzą jej alokację, aby wychwycić problemy, zanim pociągną za sobą kolejne.
Usunięcie defektu Ustalenie źródła błędu nie musi kończyć się usunięciem jego objawów lub przyczyn. Na przykład, komisja kontroli technicznej () firmy Sun Microsystems przyznała, że brak metody clone() w interfejsie Cloneable jest niedopatrzeniem, ale zdecydowała nie zmieniać wadliwego typu, aby uniknąć problemów z kompilacją istniejących programów (pomimo ich niepoprawności).