Введение
Каждый разработчик проводит до 50% рабочего времени за отладкой кода — это не шутка, а данные из отчёта McKinsey (2023). Баги могут быть коварными: от простых опечаток до трудноуловимых состояний гонки (race conditions) или утечек памяти. Ручной поиск ошибок в логах или бесконечный console.log — прошлый век. Современные AI-инструменты, такие как ChatGPT, Claude или Gemini, способны анализировать код, логи и трассировки стека быстрее человека. В этой статье я собрал 10 проверенных промтов для отладки: от разбора исключений до оптимизации производительности. Каждый промт готов к копипасту и содержит пример из реальной практики. Вы сэкономите часы нервов и научитесь задавать AI правильные вопросы.
1. Промт для анализа трассировки стека (Stack Trace)
Когда использовать: Вы получили ошибку с трассировкой стека, но не понимаете, в каком месте кода произошёл сбой.
Промт:
Проанализируй следующую трассировку стека исключения. Определи: 1) тип ошибки, 2) точную строку кода, где произошёл сбой, 3) возможную причину (null reference, index out of bounds, деление на ноль), 4) предложи исправление. Вот трассировка:
[вставьте трассировку стека]
Пример использования:
Проанализируй следующую трассировку стека исключения. Определи: 1) тип ошибки, 2) точную строку кода, где произошёл сбой, 3) возможную причину, 4) предложи исправление. Вот трассировка:
Exception in thread "main" java.lang.NullPointerException
at com.example.OrderService.calculateTotal(OrderService.java:45)
at com.example.OrderController.createOrder(OrderController.java:22)
...
Результат: AI укажет, что на строке 45 в OrderService.java происходит разыменование null объекта order.getItems(). Причина — не проверено, что список товаров может быть пустым. Исправление: добавить проверку if (order.getItems() != null).
2. Промт для поиска логических ошибок в условии
Когда использовать: Код компилируется, но работает не так, как ожидалось — например, условие срабатывает не в том случае.
Промт:
Найди логическую ошибку в следующем условии. Я ожидаю, что функция вернет true, если возраст >= 18 и страна — "Россия" или "Беларусь". Но она возвращает true для возраста 16 и страны "Россия". Проверь приоритет операторов и предложи исправление:
if (age >= 18 && country == "Россия" || country == "Беларусь") { ... }
Пример результата: AI объяснит, что из-за приоритета && выше `
||условие читается как(age >= 18 && country == "Россия") || (country == "Беларусь"). Исправление: добавить скобки —if (age >= 18 && (country == "Россия" || country == "Беларусь"))`.
3. Промт для анализа логов и поиска паттернов ошибок
Когда использовать: У вас есть файл логов (например, из сервера или приложения) и нужно быстро найти повторяющиеся ошибки.
Промт:
Проанализируй следующий лог-файл. Выдели: 1) уникальные типы ошибок, 2) их частоту, 3) временные метки (если есть всплески), 4) возможную первопричину. Вот лог:
[вставьте логи]
Пример использования:
2026-07-18 10:00:01 ERROR: Connection timeout to db:5432
2026-07-18 10:00:02 ERROR: Cannot read property 'id' of undefined
2026-07-18 10:00:05 ERROR: Connection timeout to db:5432
2026-07-18 10:00:10 ERROR: Connection timeout to db:5432
Результат: AI заметит, что ошибка Connection timeout повторяется 3 раза за 10 секунд — это указывает на проблему с сетью или базой данных, а ошибка Cannot read property может быть следствием первой (неудачный запрос).
4. Промт для поиска утечек памяти в коде
Когда использовать: Приложение потребляет всё больше памяти со временем, и нужно найти неосвобождённые ресурсы.
Промт:
Проверь следующий код на возможные утечки памяти. Ищи: 1) незакрытые файловые потоки или соединения с БД, 2) глобальные переменные, которые могут накапливать данные, 3) слушатели событий, которые не удаляются. Предложи исправления. Вот код:
[вставьте код]
Пример на JavaScript:
let cache = {};
function fetchData(url) {
if (cache[url]) return cache[url];
let data = fetch(url).then(res => res.json());
cache[url] = data;
return data;
}
Результат: AI укажет, что cache не имеет ограничения по размеру — это утечка памяти. Исправление: использовать LRU-кэш или удалять старые записи.
5. Промт для отладки асинхронного кода (Promise, async/await)
Когда использовать: Промисы не резолвятся, цепочки .then не работают, или порядок выполнения нарушен.
Промт:
Найди ошибку в следующем асинхронном коде. Я ожидаю, что "Шаг 2" выполнится после "Шаг 1", но в консоли вижу "Шаг 2" первым. Проверь правильность использования async/await или then/catch. Вот код:
[вставьте код]
Пример результата: AI обнаружит, что забыли await перед асинхронной функцией, из-за чего выполнение продолжилось без ожидания.
6. Промт для проверки SQL-запросов на ошибки синтаксиса и уязвимости
Когда использовать: SQL-запрос не выполняется или вы подозреваете SQL-инъекцию.
Промт:
Проверь следующий SQL-запрос на: 1) синтаксические ошибки, 2) уязвимости к SQL-инъекции, 3) несоответствие типов данных. Предложи исправленный вариант с использованием параметризованных запросов. Вот запрос:
SELECT * FROM users WHERE username = '" + userInput + "' AND password = '" + passInput + "'
Результат: AI укажет на SQL-инъекцию и предложит заменить на SELECT * FROM users WHERE username = ? AND password = ? с параметрами.
7. Промт для поиска расхождений в API-ответах
Когда использовать: Фронтенд ожидает одни поля, а бэкенд возвращает другие — ошибка парсинга.
Промт:
Сравни ожидаемую структуру JSON-ответа и фактическую. Найди расхождения (отсутствующие поля, неверные типы данных). Ожидаемая структура:
{"id": number, "name": string, "email": string}
Фактический ответ:
{"id": "123", "fullName": "Иван", "email": null}
Результат: AI выявит, что id — строка вместо числа, поле name отсутствует (есть fullName), а email — null.
8. Промт для оптимизации производительности (профилирование)
Когда использовать: Код работает медленно, но непонятно, какая часть тормозит.
Промт:
Проанализируй этот код с точки зрения производительности. Укажи: 1) потенциальные узкие места (циклы, дублирующиеся запросы, тяжёлые операции), 2) сложность алгоритма (Big O), 3) предложи оптимизацию. Вот код:
[вставьте код]
Пример на Python:
def find_duplicates(arr):
result = []
for i in range(len(arr)):
for j in range(i+1, len(arr)):
if arr[i] == arr[j]:
result.append(arr[i])
return result
Результат: AI скажет, что сложность O(n²), и предложит использовать set для O(n).
9. Промт для отладки многопоточных состояний гонки (Race Conditions)
Когда использовать: Приложение работает нестабильно при многопоточном доступе — данные иногда корректны, иногда нет.
Промт:
Проверь этот код на состояние гонки. Я использую несколько потоков для инкремента счётчика. Укажи: 1) критическую секцию, 2) предложи механизм синхронизации (мьютекс, семафор, атомарные операции), 3) напиши исправленный код. Вот код:
counter = 0
for i in range(10):
counter += 1 # несколько потоков
Результат: AI объяснит, что counter += 1 не атомарен, и предложит использовать lock или threading.Atomic.
10. Промт для поиска багов в регулярных выражениях
Когда использовать: Регулярное выражение не находит нужные строки или находит лишние.
Промт:
Проверь регулярное выражение. Я хочу найти email-адреса в тексте, но выражение пропускает адреса с точкой в имени. Найди ошибку и предложи исправление. Текст:
"My email is john.doe@example.com and jane@test.org"
Регулярка: /\w+@\w+\.\w+/
Результат: AI заметит, что \w+ не включает точку, и предложит /\w+(\.\w+)*@\w+\.\w+/.
Заключение
Отладка — это искусство, но с правильными инструментами она становится рутиной. Промты, которые я привёл, помогут вам быстрее находить баги: от простых null pointer до сложных состояний гонки. Главное — давать AI конкретный контекст: трассировку стека, логи или фрагмент кода. Не стесняйтесь уточнять, если ответ неполный — AI может и ошибаться. Попробуйте сегодня применить хотя бы один промт из списка, и вы увидите, как сократится время на поиск ошибок. А если у вас есть свои любимые промты для отладки — делитесь в комментариях к этой статье!
Комментарии