Program do wykrywania i diagnozowania błędów w programach (również w asemblerze) to debugger. Jego celem nie jest tłumaczenie kodu, lecz analiza wykonania programu i pomoc w znalezieniu miejsca, w którym pojawia się błąd logiczny lub błąd czasu wykonania.
W praktyce, szczególnie w programowaniu niskopoziomowym, debugger pozwala m.in.:
- uruchamiać program krokowo (instrukcja po instrukcji),
- ustawiać punkty przerwania (breakpoints), aby zatrzymać wykonanie w wybranym miejscu,
- podglądać i porównywać rejestry procesora, flagi oraz stan pamięci,
- obserwować zmiany wartości danych w trakcie działania programu.
Odpowiedź "kompilatorem" jest nieprawidłowa, bo kompilator dotyczy języków wysokiego poziomu i służy głównie do tłumaczenia kodu źródłowego; może wykrywać błędy składniowe/semantyczne przed uruchomieniem, ale nie zastępuje analizy działania programu. Odpowiedź "linkerem" jest błędna, ponieważ linker łączy moduły obiektowe i biblioteki w plik wykonywalny, nie służy do śledzenia wykonania instrukcji. Odpowiedź "konwerterem" także nie pasuje: konwerter zmienia format danych lub plików (np. kodowanie, format binarny), a nie diagnozuje błędów programu.
Na egzaminie warto zapamiętać prostą regułę: debugger = diagnoza podczas działania, assembler/kompilator = tłumaczenie, linker = łączenie. To rozróżnienie jest szczególnie ważne w elektronice i systemach wbudowanych, gdzie często analizuje się program na poziomie instrukcji i rejestrów.