Skip to main content
Зміст гайду

Зміст гайду

Час на вивчення: 12 хв
#automation#bug#hunting#claude#code#debugging#beginners
Початківець12 хв

Пошук та виправлення багів із Claude Code: практичний посібник

Повний практичний посібник з налагодження коду через Claude Code: аналіз stack traces, розбір серверних логів, усунення помилок TypeScript, виправлення тестів та ліквідація вузьких місць продуктивності.

Опубліковано:

1. Чому налагодження з Claude Code ефективніше за традиційний дебаг

Класичний процес пошуку помилок часто перетворюється на виснажливу рутину: розробник годинами продирається крізь заплутаний stack trace у терміналі, вручну розставляє десятки console.log або точок зупинки дебагера і намагається зв'язати дані з декількох модулів.

Термінальний агент Claude Code принципово змінює цей підхід: маючи прямий доступ до файлової системи, він здатен миттєво пройти ланцюжком виконання від клієнтського UI через контролери бекенду аж до запитів у базу даних.

mermaid
flowchart TD A["Симптом: Помилка або аварійний лог"] --> B["Claude Code CLI"] B --> C["Аналіз Stack Trace & Виділення файлів"] C --> D["Read & Grep по кодовій базі"] D --> E["Локалізація джерела збою"] E --> F["Генерація гіпотези та виправлення"] F --> G["Автоматичний прогін тестів / збірки"] G -->|Успіх| H["Коміт виправлення"] G -->|Помилка| E

Порівняння ручного дебагінгу та налагодження з Claude Code

КритерійТрадиційне ручне налагодженняНалагодження з Claude Code
Локалізація помилкиРучний перехід за рядками стеку в IDEАвтоматичне зіставлення помилки з контекстом проєкту
Робота з логамиОкомірний пошук аномалій у тисячах рядківАвтономний аналіз структурованих логів через конвеєри CLI
Складні зв'язкиНеобхідність тримати в голові граф викликів 5-10 файлівПокрокове семантичне трасування потоків даних
TypeScript помилкиСпроби швидко закрити проблему через as anyКоректне виправлення звуження типів без порушення системи
Верифікація фіксуРучний перезапуск додатка або тестів у консоліАвтоматичний циклічний перезапуск тестів до повного успіху
Примітка

Claude Code не замінює розуміння коду розробником, але скорочує час від виникнення інциденту до локалізації його першопричини в 3–5 разів.


2. Анатомія ідеального баг-репорту для AI-асистента

Якість та швидкість розв'язання проблеми безпосередньо залежать від того, наскільки повно описано баг у вхідному запиті.

Розмитий запит проти структурованого опису

Увага

Неефективний запит: «Додаток зламався, форма реєстрації не працює, подивись що там не так.»

За таким описом агент змушений навмання перебирати десятки файлів, витрачаючи ліміти контекстного вікна на здогадки.

Порада

Професійний інженерний опис: «Під час відправлення форми на /register користувач отримує статус 500. У консолі браузера з'являється помилка: TypeError: Cannot read properties of undefined (reading 'email'). Запит надсилає JSON із полями username та mailAddress. Перевір схему валідації в src/api/auth.ts та узгодь назви полів.»

Чотири правила вичерпного опису дефекту

  1. Очікувана поведінка (Expected Behavior): що саме мало статися за успішного сценарію.
  2. Фактична поведінка (Actual Behavior): точний текст помилки, код статусу або неочікуваний результат обчислення.
  3. Кроки для відтворення (Reproduction Steps): які кнопки натиснуто, які параметри передано в URL або яке тіло запиту надіслано.
  4. Контекст локалізації (Context & File Paths): на якій саме сторінці, компоненті чи ендпоінті падає виконання.

3. Аналіз Stack Traces та розбір повідомлень про помилки

Повідомлення про помилки та стеки викликів можна передавати агентові в чистому вигляді. Claude самостійно відфільтрує шум із системних бібліотек (node_modules) та зосередиться на коді вашого проєкту.

Передача сирого стека помилки

text
I am getting this runtime error when rendering the user table: TypeError: Cannot read properties of undefined (reading 'map') at UserTable (src/components/UserTable.tsx:34:22) at renderWithHooks (node_modules/react-dom/cjs/react-dom.development.js:15486:18) at mountIndeterminateComponent (node_modules/react-dom/cjs/react-dom.development.js:20103:13) What is causing this, and how should we properly handle loading and empty states?

Як Claude розбирає подібний інцидент

  1. Цільове читання: відкриває src/components/UserTable.tsx на рядку 34 за допомогою інструмента Read.
  2. Аналіз джерела даних: перевіряє пропси та хуки стану (useState, useQuery), щоб з'ясувати, чому масив користувачів на момент рендеру має значення undefined.
  3. Безпечне виправлення: додає перевірку на наявність даних (Optional Chaining users?.map(...)), стан завантаження (Skeleton/Spinner) або значення за замовчуванням (users = []).

4. Робота з логами сервера та аналіз через пайплайн CLI

Для дослідження серверних збоїв чи помилок на staging-середовищі Claude Code можна підключати безпосередньо до стандартних потоків вводу/виводу Unix.

Аналіз логів через консольний конвеєр

bash
# Передати останні 100 рядків серверного логу в Claude для швидкої діагностики tail -n 100 /var/log/nginx/error.log | claude -p "Find critical errors and explain their root cause. Provide actionable fix instructions." # Пошук помилок із конкретного сервісу Docker docker logs --tail 200 api-service 2>&1 | claude -p "Analyze database connection failures and timeout exceptions."

Інтерактивне дослідження файлів логів

В інтерактивній сесії ви можете спрямувати агента на збережені логи:

text
Read logs/production-error.log and focus on entries with status 500 from the last two hours. Group related exceptions and trace which external service call failed.

Claude виділить повторювані шаблони відмов, виявить збої аутентифікації зовнішніх API або вичерпання пулу з'єднань із базою даних.


5. Стратегічне інструментування: точкове логування та трасування

Найскладніші баги — так звані «мовчазні дефекти» (Silent Bugs), коли додаток не викидає винятків, але повертає некоректний результат (наприклад, підсумкова вартість замовлення рахується як $0.00 замість $42.50).

У таких випадках використовується метод стратегічного інструментування.

Покроковий алгоритм розслідування

  1. Поставте завдання на розстановку логів:

    text
    The order total calculation is returning 0 for items with promo codes. Add targeted diagnostic logging to calculateOrderTotal and its call sites to log input arguments, discount factors, and return values.
  2. Відтворіть баг у додатку: виконайте замовлення з промокодом у тестовому середовищі.

  3. Передайте отримані діагностичні логи назад агентові:

    text
    Here is the diagnostic log from the checkout attempt: [DEBUG] Item subtotal: 42.50 [DEBUG] Promo code applied: 'SPRING20' -> parsed discount: '0.2' (string) [DEBUG] Applying formula: 42.50 * (1 - '0.2') -> NaN -> coerced to 0 What went wrong?
  4. Виправлення та очищення:

    Claude миттєво вкаже на проблему невідповідності типів (строка замість числа), виправить функцію парсингу та самостійно прибере всі тимчасові налагоджувальні логи.


6. Виправлення складних помилок типів у TypeScript

Помилки компілятора TypeScript бувають заплутаними, особливо при роботі з дженериками, об'єднаннями типів (Unions) або вкладеними об'єктами.

Чому небезпечно «заглушати» компілятор

Багато розробників у поспіху використовують примусове приведення типів (as unknown as TargetType), що приховує проблему на етапі збірки, але призводить до аварій у рантаймі.

Інструкція для Claude щодо чистого розв'язання

text
I am encountering this TypeScript compiler error in src/services/payment.ts:48: Type 'string | undefined' is not assignable to type 'string'. Type 'undefined' is not assignable to type 'string'. Fix this issue properly using strict type narrowing or safe fallback values. Do NOT use type assertions ('as') or 'any'.

Claude перевірить весь життєвий цикл змінної та додасть коректну перевірку на відсутність значення.


7. Автоматизований ремонт збірки та тестів у циклі

Одна з найпотужніших можливостей Claude Code — автономна робота в циклі «Запуск → Аналіз → Правка → Перевірка».

mermaid
flowchart TD A["Команда: 'Fix all failing tests'"] --> B["Запуск npm test через Bash"] B --> C{"Всі тести пройдено?"} C -->|Так| D["Звіт про успішне завершення"] C -->|Ні| E["Аналіз помилок у звіті тестувальника"] E --> F{"Де баг: у коді чи в тесті?"} F -->|У коді| G["Виправлення бізнес-логіки"] F -->|У тесті| H["Оновлення застарілих очікувань тесту"] G & H --> B

Готові шаблони команд для ліквідації дефектів


8. Пошук вузьких місць продуктивності та витоків ресурсів

Помилки — це не лише аварійні завершення (crash). Повільна робота сторінки, надмірне навантаження на базу даних та зависання інтерфейсу — це критичні дефекти продуктивності.

Запит на аудит швидкодії

text
The /dashboard page takes over 6 seconds to load. Analyze the server-side data fetching and client components: 1. Check for N+1 query patterns in our Prisma calls. 2. Identify missing database indices on frequently queried foreign keys. 3. Look for unnecessary client component re-renders caused by unstable object references.

Що Claude шукає під час аналізу продуктивності:

  • N+1 запити: заміна циклічних запитів до бази на єдиний запит із оператором IN або зв'язком include.
  • Мемоізація в React: виявлення важких обчислень без useMemo або нестабільних обробників подій без useCallback.
  • Надлишкові пейлоади: додавання пагінації (limit/offset) або вибіркової проекції полів (select: { id: true, name: true }) замість завантаження всієї таблиці.

9. Практичний воркшоп: покрокове розслідування реального багу

Розглянемо практичний сценарій: користувачі скаржаться, що при застосуванні купона на знижку 15% у кошику з трьох товарів загальна сума списується неправильно.

Крок 1. Локалізація коду розрахунку

Відкрийте Claude Code і знайдіть потрібний модуль:

text
Find where the cart discount calculation is implemented and inspect the file.

Claude скористається Grep за словом discount і відкриє файл src/domain/cart.ts.

Крок 2. Аналіз дефектного коду

typescript
// Знайдений фрагмент у src/domain/cart.ts: export function applyCoupon(total: number, discountPercent: number): number { return total - total * (discountPercent / 100); }

На перший погляд, формула правильна. Але у JavaScript операції з плаваючою крапкою часто призводять до проблем округлення: 100 - 100 * (15 / 100) видає 85.00000000000001, що ламає платіжний шлюз Stripe, який очікує цілі центи.

Крок 3. Формулювання завдання на виправлення та тести

text
In src/domain/cart.ts, the applyCoupon function causes floating-point precision issues that fail payment validation. Refactor it to calculate prices in integer cents, add rounding via Math.round, and create a comprehensive unit test in src/domain/cart.test.ts covering edge cases.

Крок 4. Верифікація результату

Агент виправляє функцію:

typescript
export function applyCouponInCents(totalCents: number, discountPercent: number): number { const discountAmount = Math.round(totalCents * (discountPercent / 100)); return Math.max(0, totalCents - discountAmount); }

Після цього Claude самостійно запускає npm test src/domain/cart.test.ts і підтверджує, що всі тести пройдено.


10. Швидка самоперевірка та підсумковий чек-лист дебагінгу

Перевірте свої навички роботи з дебагінгом у Claude Code.

Контрольні питання

Порада

1. Що є найбільш ефективним способом дослідження серверного збою, що стався на staging-сервері?

Відповідь: Передати останні рядки логу безпосередньо в автономний режим Claude Code через консольний конвеєр: tail -n 150 /var/log/app.log | claude -p "Find errors and diagnose causes".

Порада

2. Чому при виправленні помилок типів TypeScript слід забороняти асистенту використовувати оператор as?

Відповідь: Приведення типів через as лише маскує проблему для компілятора, але не захищає додаток від аварійних падінь у рантаймі при відсутності очікуваних даних. Слід вимагати коректного звуження типів (Type Narrowing) або значень за замовчуванням.

Порада

3. Як правильно організувати виправлення десятка тестів, що впали після рефакторингу?

Відповідь: Запустити Claude Code в циклічному режимі з чіткою інструкцією: запустити тести, проаналізувати помилки, розрізнити застарілі очікування тестів від реальних дефектів бізнес-логіки та повторювати прогін до 100% успіху.

Чек-лист системного полювання на баги

  • Надавайте агенту 4 обов'язкові елементи: Очікувану поведінку, Фактичну поведінку, Кроки відтворення та Шляхи файлів.
  • Передавайте повні stack traces без скорочень — Claude сам знайде потрібні рядки коду.
  • Використовуйте Unix-пайпи (tail | claude -p) для швидкої діагностики серверних логів.
  • Вимагайте безпечного виправлення типів без використання примусового приведення as any.
  • Доручайте Claude писати регресійні тести на кожен виправлений баг, щоб запобігти рецидивам.
  • Очищайте тимчасові діагностичні логи перед фіксацією змін у репозиторії.
Цей гайд повністю безкоштовний. Якщо він зекономив вам вечір — ви можете підтримати розвиток проєкту.
Підтримати автора