ИИ агент для отладки кода
Скинь стек трейс — получи 3 конкретные гипотезы с файлами и строками. В 80% случаев причина в первой тройке
8 мин
среднее время на баг
80%
точность первой гипотезы
5×
быстрее обычного
С отладкой знакомо?
😵
Стек трейс ни о чём не говорит
Строки с номерами файлов, NullPointerException на строке 347 — и совершенно непонятно почему.
🔄
console.log везде
Добавляешь логи, перезапускаешь, смотришь вывод. Убираешь, добавляешь в другом месте. Час прошёл.
🕰️
Баг только в проде
Локально не воспроизводится. На staging — тоже. Только у пользователей. Данные другие? Нагрузка? Непонятно.
🌐
Stack Overflow не помогает
Нашёл похожий вопрос, попробовал принятый ответ. Не то. Попробовал второй. Не то. Контекст другой.
Реальные кейсы отладки
1
NullPointerException в Java
Баг в проде на высоконагруженном сервисе. Воспроизводился нестабильно, раз в несколько часов.
Настройка
👤
Пользователь
java.lang.NullPointerException at com.app.service.OrderService.processPayment(OrderService.java:89)
at com.app.controller.PaymentController.charge(PaymentController.java:54)
🤖
Агент
🔍 Анализ:
Строка 89 в processPayment — обращение к объекту, который может быть null. Судя по стеку — это внутри метода charge контроллера.
3 гипотезы:
1. payment.getUser() возвращает null — пользователь не загружен из сессии
2. order.getItems() — список товаров пустой или lazy-loaded (N+1 → NPE)
3. Race condition при параллельных запросах от одного пользователя
Покажи строку 89 и 5 строк вокруг.
Ежедневное использование
👤
Пользователь
Order order = orderRepository.findById(orderId);
BigDecimal total = order.getItems().stream()
.map(item -> item.getPrice().multiply(...))
🤖
Агент
Найдено. orderRepository.findById() возвращает Optional<Order>, но ты вызываешь методы напрямую без проверки.
Исправление:
Order order = orderRepository.findById(orderId)
.orElseThrow(() -> new OrderNotFoundException(orderId));
Плюс: getItems() — lazy collection, вне транзакции вернёт null. Добавь @Transactional на метод или используй JOIN FETCH в запросе.
2
Утечка памяти в Node.js
Сервис потреблял всё больше памяти и падал каждые 6 часов. Причина была неочевидной.
Настройка
👤
Пользователь
Node.js сервис потребляет память постепенно — 200MB → 1.5GB за 6 часов, потом падает. Heap dump есть. В коде несколько EventEmitter-ов.
🤖
Агент
🔍 EventEmitter + постепенный рост = типичная утечка.
Самая частая причина: подписываешься на события в цикле или при каждом запросе без последующего .removeListener().
Проверь:
1. Есть ли .on('event', handler) внутри middleware или обработчика запросов?
2. emitter.listenerCount('event') — считает ли со временем?
3. Использованы ли .once() вместо .on() для одноразовых обработчиков?
Ежедневное использование
👤
Пользователь
app.use((req, res, next) => {
const emitter = new EventEmitter();
emitter.on('data', processData);
// ...
next();
});
🤖
Агент
Нашли. Новый EventEmitter создаётся при каждом запросе, но никогда не уничтожается. При 1000 req/sec за 6 часов = 21 миллион накопленных объектов.
Исправление:
Вынести emitter из middleware наружу (один экземпляр), или добавить emitter.removeAllListeners() при завершении запроса, или использовать emitter.once().
3
Нестабильные тесты (flaky tests)
CI падал в случайных тестах раз в 2-3 сборки. Локально всё проходило. Потеря времени — 40 минут на перезапуск пайплайна.
Настройка
👤
Пользователь
В CI случайно падают тесты авторизации. Ошибка: Expected 200, got 401. Локально всегда проходит. Тесты на Jest + Supertest.
🤖
Агент
🔍 Нестабильные тесты с авторизацией — частые причины:
1. Тесты не изолированы — один тест меняет состояние (сессию, токен) для другого
2. Асинхронная гонка — тест завершается до полного ответа сервера
3. Общая БД в тестах — данные из параллельных тестов конфликтуют
Покажи setup/teardown и как создаётся токен для тестов.
Ежедневное использование
👤
Пользователь
beforeAll(async () => {
token = await getAuthToken();
});
test('create order', ...)
test('get orders', ...)
test('delete order', ...)
🤖
Агент
Проблема найдена. beforeAll создаёт один токен на все тесты. Если тест «delete order» удаляет пользователя или инвалидирует сессию — следующие тесты получают 401.
Исправление:
Используй beforeEach для свежего токена, или убедись что тесты не модифицируют авторизационное состояние. Лучшая практика — изолированный пользователь для каждого test suite.
Вопросы про отладку с агентом
С какими языками работает агент?
Любые: Python, JavaScript/TypeScript, PHP, Go, Java, C#, Rust, C++, Ruby, SQL. Переключается автоматически по коду.
Нужно давать весь код проекта?
Нет. Обычно достаточно стек трейса + 10-20 строк вокруг ошибки + описание что делал пользователь. Агент запросит дополнительный контекст если нужно.
Агент может подключиться к серверу или IDE?
Нет. Работает через чат в Telegram. Ты копируешь нужный контекст (логи, код, стек трейс) — агент анализирует и отвечает.
Что если баг воспроизводится только в проде?
Это не проблема. Описываешь условия: нагрузка, данные, окружение, версии зависимостей — агент анализирует гипотезы по косвенным признакам. Чем больше контекста, тем точнее.