Я хочу додати, що налагоджувач не завжди є ідеальним рішенням, і не завжди повинен бути рішенням для налагодження. Ось кілька випадків, коли налагоджувач може не працювати для вас:
- Частина вашої програми, яка зазнає невдачі, насправді велика (погана модуляризація, можливо?), І ви точно не впевнені, з чого почати переходити через код. Перехід через все це може зайняти багато часу.
- Ваша програма використовує багато зворотних викликів та інших нелінійних методів управління потоком, що змушує відладчик заплутатися, коли ви проходите через нього.
- Ваша програма багатопотокова. Або ще гірше, ваша проблема викликана перегоном.
- Код, в якому є помилка, запускається багато разів, перш ніж виправити помилку. Це може бути особливо проблематично в основних циклах або, що ще гірше, у фізичних двигунах, де проблема може бути числовою. Навіть встановлення точки зупинку, у цьому випадку, просто призвело б до того, що ви натискали її багато разів, а помилка не з’являлася.
- Ваша програма повинна працювати в режимі реального часу. Це велика проблема для програм, які підключаються до мережі. Якщо ви встановите точку зупинки у своєму мережевому коді, інший кінець не буде чекати, поки ви пройдете, це просто тайм-аут. Програми, які покладаються на системний годинник, наприклад, ігри з фреймкіпом, теж не набагато краще.
- Ваша програма виконує деструктивні дії, такі як запис у файли або надсилання електронних листів, і ви хочете обмежити кількість разів, необхідних для її проходження.
- Ви можете сказати, що ваша помилка спричинена неправильними значеннями, що надходять до функції X, але ви не знаєте, звідки ці значення. Потрібно знову і знову запускати програму, встановлюючи точки зупинку все далі і далі, може бути величезною проблемою. Особливо, якщо функція X викликається з багатьох місць у програмі.
У всіх цих випадках або різка зупинка програми може спричинити різницю в кінцевих результатах, або проходження вручну у пошуках одного рядка, в якому виникла помилка, - це занадто великі клопоти. Подібне може траплятися як у випадку вашої помилки, або у збої. Наприклад, якщо пошкодження пам'яті спричиняє збій, до того моменту, коли збій стався, це вже занадто далеко від місця, де спочатку сталося пошкодження пам'яті, і корисної інформації не залишилось.
Отже, які альтернативи?
Найпростішим є просто реєстрація та твердження. Додайте журнали до програми в різні моменти та порівняйте отримане з тим, що очікуєте. Наприклад, подивіться, чи взагалі навіть викликана функція, де, на вашу думку, є помилка. Подивіться, чи є змінні на початку методу такими, якими ви їх вважаєте. На відміну від точок зупинку, це нормально, коли існує багато рядків журналу, в яких нічого особливого не відбувається. Після цього ви можете просто шукати журнал. Після того, як ви потрапите в рядок журналу, який відрізняється від того, що ви очікуєте, додайте більше в ту ж область. Звужуйте його все далі і далі, поки він не стане достатньо малим, щоб можна було реєструвати кожен рядок у виправленій області.
Твердження можна використовувати для фіксації неправильних значень у міру їх виникнення, а не коли вони мають ефект, видимий для кінцевого користувача. Чим швидше ви вловите неправильне значення, тим ближче ви до рядка, який його створив.
Рефактор та модульний тест. Якщо ваша програма занадто велика, можливо, варто перевірити її по одному класу або одній функції за раз. Дайте йому входи, і подивіться на результати, і подивіться, які не такі, як ви очікуєте. Можливість звузити помилку з цілої програми до однієї функції може суттєво змінити час налагодження.
У випадку витоків пам’яті або тупіння пам’яті використовуйте відповідні інструменти, які можуть аналізувати та виявляти їх під час виконання. Першим кроком є можливість виявити, де відбувається справжня корупція. Після цього ви можете використовувати журнали, щоб повернутися до місця, де були введені неправильні значення.
Пам'ятайте, що налагодження - це процес, що повертається назад. У вас є кінцевий результат - помилка - і ви знайдете причину, яка їй передувала. Мова йде про те, щоб рухатися назад, і, на жаль, налагоджувачі лише крокують вперед. Тут хороший журнал та аналіз післясмертних випадків можуть дати набагато кращі результати.