Сначала диагностирует ошибку ищет причину возникновения её, а дальше устраняет её.
Ошибки могут быть логического характера и синтаксические, выявить син ошибки в коде может помочь компилятор на стадии обработки кода, а вот логические ошибки выявить немного сложнее, потому что программа может быть скомпилирована без ошибок, а вот результаты выдаваемые программой могут быть ошибочными.