Проследяване на грешки

Проследяване на грешки

Проследяването на грешки е процес на откриване и коригиране на грешки в програма.

Дебъгерът е мощен инструмент, който позволява бързо намиране на грешки, като дава представа за вътрешните операции на програмата. Това е възможно посредством спиране на изпълнението и анализиране на състоянието на програмата чрез задълбочено изследване на променливите и как те се променят ред по ред.

Типове грешки

При създаването и изпълнението на програми могат да възникнат различни видове грешки. Те се разделят на няколко основни категории:

1.Синтактични и компилационни грешки (Syntax and Compilation errors)
Това са грешки, които нарушават граматическите или структурните правила на езика Java. При Java тези грешки се откриват по време на компилация, когато компилаторът превежда изходния код в байткод, който може да бъде изпълнен от Java Virtual Machine (JVM).

Синтактичните грешки пречат на програмата да бъде компилирана и стартирана. Примери:

  • Пропусната скоба или точка и запетая;
  • Неправилно изписана ключова дума;
  • Несъвместим тип данни при присвояване.

Пример:

int x = "текст"; // Компилационна грешка – несъвместим тип данни

В IntelliJ IDEA компилаторът автоматично маркира синтактичните и компилационните грешки още при писане на кода.

2. Грешки по време на изпълнение (Runtime errors)

Тези грешки възникват след като програмата е компилирана и стартирана в JVM. Обикновено се появяват при опит за извършване на недопустима операция.

Примери:

  • Деление на нула;
  • Достъп до несъществуващ елемент в масив;
  • Работа с неинициализиран обект.

Пример:

int[] numbers = {1, 2, 3};
int x = numbers[5]; // Грешка по време на изпълнение – несъществуващ индекс

Runtime грешките спират изпълнението на програмата в момента, в който възникнат.

  1. Системни грешки (System errors)

Това са грешки, които не зависят от логиката на програмата, а от средата, в която тя се изпълнява — операционната система или хардуера.

Примери:

  • Липса на памет;
  • Повреден файл;
  • Прекъсната връзка или липсващ драйвер.

Системните грешки обикновено се обработват чрез изключения или от самата система.

  1. Логически или изходни грешки (Logic / Output errors)

Това са грешки, при които програмата се изпълнява успешно, но резултатите са неправилни поради грешна логика в алгоритъма.

Пример:

double area = 2 * Math.PI * r; // Грешна формула за лице на кръг

В този случай програмата работи, но пресмята обиколката вместо лицето на кръга.

Изпълнение на код в режим на отстраняване на грешки

Има няколко начина за стартиране на програмата в режим за отстраняване на грешки:

  1. От менюто Run или като натиснете Shift + F9;

    Screenshot 2025-10-20 214928

  2. От иконата Run в лентата с номерацията на редовете, като изберете опцията Debug;

    Screenshot 2025-10-20 215911

  3. От контекстното меню

    Screenshot 2025-10-20 215808

  4. Oт лентата с инструменти

    Screenshot 2025-10-20 215436

Можете да редактирате конфигурацията за изпълнение, за да добавите опции за виртуална машина или да подадете аргументи на програмата.

Screenshot 2025-10-20 220343

Точки на прекъсване

За да проверим как програмата работи по време на изпълнение, трябва да спрем нейното изпълнение преди заподозрения код. Това става чрез задаване на точки на прекъсване. Точките на прекъсване показват редовете от код, където програмата ще бъде спряна, за да можете да проверите нейното състояние.

За да зададете точка на прекъсване на даден ред, щракнете в областта на лентата с номерацията на редовете или използвайте клавишната комбинация Ctrl+F8 (Win/Linux), ⌘ F8 (macOS).

image

При натискане с десен бутон се отваря диалогов прозорец, където може да се зададе условиe кога да спре изпълнението на програмата. Ако условието върне true, избраното действие се изпълнява. В противен случай точката на прекъсване се игнорира.

Screenshot 2025-10-20 221543

Прозорец за отстраняване на грешки

Прозорецът за отстраняване на грешки показва важна информация, когато вашето приложение спре изпълнението на точка на прекъсване:

· Debugger - показва информация за изпълнение на програмата;

· Console - показва резултата от изпълнението на програмата;

· Frames - показва реда на изпълнение на командите;

· Variables - показва състоянието на обектите.

Screenshot 2025-10-20 222012

Постъпково изпълнение на програмата

Има различни начини за навигация в кода в режим на отстраняване на грешки. Например, може да предпочетете да изпълните ред код, без да се интересувате от подробностите на извикваните методи. Или може да предпочетете да видите кои редове код се изпълняват, когато извиквате друг метод от вашето приложение, библиотеки или API. Можете да направите това чрез различните стъпкови действия:

  • Step into (F7) – изпълнява текущия ред и ако той съдържа метод, влиза в него;
  • Step over (F8) – изпълнява текущия ред, но ако съдържа метод, не влиза в него;
  • Force Step Into – позволява да дебъгвате методи, дефинирани в API или библиотеки;
  • Step out (Shift - F7) – излиза от текущия метод;
  • Drop Frame – позволява да се върнете назад през изпълнението на код, като изпуснете извикване на метод;
  • Run to cursor (Alt+F9) – изпълнението на програмата продължава, докато не се достигне реда, на който е позициониран курсора.

Поставяне на пауза, възобновяване и спиране на дебъгера

Ако изглежда, че приложението ви не реагира, можете да поставите програмата на пауза, за да анализирате къде е блокирал кодът ви.

В прозореца за отстраняване на грешки щракнете върху Пауза на програмата и прозорецът на редактора ще покаже класа и метода, които приложението ви изпълнява в момента – или е блокирано.

Можете да възобновите изпълнението на програмата, като щракнете върху Възобновяване на програмата или като използвате клавишната комбинация F9. За да рестартирате програмата в режим на отстраняване на грешки, изберете Повторно изпълнение. Можете да спрете отстраняването на грешки във вашата програма по всяко време, като използвате иконата Stop .