JavaRush /Курси /Claude Code SELF /Як читати помилку

Як читати помилку

Claude Code SELF
Рівень 11 , Лекція 2
Відкрита

1. Червоний текст помилки — це карта

На порталі Тьома натрапляє на живу червону помилку. Не рядок із нічного журналу, а те саме червоне простирадло тексту, що зʼявляється на екрані просто зараз, коли щось падає. Незрозумілі слова, шляхи до файлів, нічого людського. Перший інстинкт у нього незмінний: закрити й зробити вигляд, що не бачив, а краще переслати комусь розумнішому. Наприклад, Льосі.

— Стоп, — Льоха ловить цей порив. — Куди закривати? Ви зараз викидаєте доказ.

— Який доказ, це ж просто помилка. Каша з червоного тексту.

— Це не каша. Це карта місця злочину, — Льоха не дає йому втекти. — У цьому «простирадлі» точно записано, де і що зламалося. Закрити його — це як на місці аварії заплющити очі й удавати, що нічого не сталося. Навчитеся його читати — і страх перетвориться на корисну підказку. Давайте розберемо, як воно влаштоване — простіше, ніж здається.

І Тьома вперше не закриває червоне, а вчитується — ніби перекладає його на людську мову. Не магічне прокляття, а чужа мова, яку можна розібрати.

2. Стектрейс: тип, файл, рядок

— Це простирадло називається стектрейс, — каже Льоха. — Англійською stack trace, «слід стека викликів». Звучить страшно, а насправді там лише три корисні речі. Дивіться, я відріжу зайве й покажу скелет.

Він показує на екрані скорочений приклад (коментарі — пояснення, у реальному журналі їх немає):

TypeError: Cannot read properties of undefined (reading 'score')   # ТИП збою — що саме пішло не так
    at calculateReward (reward-flow.js:30)              # ФАЙЛ і РЯДОК — де зламалося
    at processClaim (portal.js:23)                      # хто це викликав (ланцюжок викликів)

— Бачите три частини? — Льоха розкладає все по поличках. — Перший рядок — тип помилки: що саме пішло не так. Другий — файл і рядок: де це сталося, reward-flow.js, рядок 30. Третій і нижче — хто це викликав, ланцюжок викликів: знизу вгору, хто кого кликав. І все. Стектрейс — це прямий вказівник: ідіть у цей файл, на цей рядок, подивіться, що там відбувається.

Тьома вдивляється. І ловить, що замість «зламалося все, кінець» у нього вперше зʼявляється нормальна форма думки:

— Тобто це не «все вибухнуло». Це «вибухнуло ось тут, у цьому файлі, на цьому рядку».

— Саме так. Це навігатор до місця поломки, а не привід закривати термінал. Як чорна скринька літака: стрічка лякає, але в ній точно записано, де і в який момент що відмовило. Чорну скриньку не викидають — її розшифровують.

3. Де вибухнуло ≠ де закладено міну

Тьома вже рветься в бій:

— Чудово, зрозумів! Рядок 30, файл reward-flow.js. Іду туди, лагоджу цей рядок — і все?

— А от тут зупиніться, — Льоха каже твердо. — Найчастіша помилка новачка. Місце, де вибухнуло, — не завжди місце, де закладено міну.

— У сенсі? Воно ж прямо показує рядок 30.

— Воно показує, де сталося падіння. Це симптом. А причинакорінь — може сидіти зовсім в іншому місці. Дивіться: застосунок упав на рядку 30, бо туди прийшло порожнє значення. Але порожнім воно стало не тут — його хтось зробив порожнім трьома кроками раніше, в іншому файлі. Виправите рядок 30 — заглушите симптом, а корінь залишиться, і все знову вилізе трохи в іншому місці.

Льоха підбирає образ:

— Це як дим у салоні літака. Дим ви бачите в салоні — це те, що болить. А горить проводка під підлогою. Гасити дим у салоні марно: доки не полагодите проводку, він знову валитиме. Симптом — дим. Корінь — проводка.

Тьома повільно киває.

— Тобто, — каже він, — раніше для мене це була чорна коробка. Зламалося — штовхнути або переслати комусь розумнішому, інших варіантів немає. А тут, виходить, усередині лежать факти. І з цими фактами я сам можу розбиратися.

— Саме так, — відгукується Льоха. — Не штовхнути, а прочитати.

4. Два докази: стектрейс і журнал

— Слухайте, а той нічний журнал, який я вранці читав, — він тут до чого? — згадує Тьома. — Він же теж про цю ніч.

— Ще й дуже, — Льоха пожвавлюється. — Це ваш другий доказ, і він зовсім іншої природи. Дивіться, у чому різниця. Стектрейс — це місце аварії просто зараз: ось тут димить, ось цей файл, цей рядок. А нічний журнал — це хроніка подій: що агент вирішував робити вночі та в якому порядку. Де вимкнув тести, де зніс сторінку, де підкрутив результат, де не залишив шляху назад.

— Тобто один каже «де болить», а другий — «що відбувалося»?

— Точно. Стектрейс — як слід на снігу там, де ви впали. Журнал — як запис камери: хто всю ніч ходив цим двором. Стектрейс відповідає на «де», журнал — на «що змінювали поруч і навіщо». І ось тут найважливіше: кожен окремо — напівсліпий. Стектрейс покаже місце вибуху, але не скаже, хто заклав міну. Журнал покаже, що агент уночі копирсався в reward-flow, але сам по собі не доведе, що вибухнуло саме через це.

5. Звʼязка двох доказів: спочатку факти, потім агент

— Тоді як із двох напівсліпих доказів зібрати один зрячий? — питає Тьома.

— Звʼязкою двох доказів, — Льоха явно чекав на це питання. — У вас їх якраз два. Перший — стектрейс на екрані: він каже, де вибухнуло зараз. Другий — нічний журнал: він каже, що агент змінював уночі в цих околицях. Окремо кожен напівсліпий. А разом — стереокартинка.

— Тобто відкриваю нічний журнал, дивлюся, що агент чіпав уночі в цій зоні?

— Саме так. Стектрейс показав вам reward-flow.js. Відкриваєте нічний журнал, шукаєте, що агент робив із reward-flow уночі. Знаходите рядок «підігнав reward-flow під результат» — і ось він, корінь. Не там, де задиміло, а там, де він уночі заклав міну. Зіставили одне з одним — знайшли справжню причину, а не просто місце вибуху.

І тут Тьома сам викладає порядок, ніби промовляє собі під ніс нове правило:

— Виходить так: спочатку я сам дивлюся на факти — стектрейс плюс журнал. І лише потім кличу агента лагодити. Не навпаки.

— Ось тепер ви говорите як інженер, — відповідає Льоха. — Бо якщо покликати агента без фактів на вході — з одним «у мене не працює, полагодь» — він почне гадати. А агент, який гадатиме, цієї ночі якраз і був джерелом усіх бід. Спочатку факти. Потім агент.

Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ