Как найти ошибку в коде с помощью ИИ

Используйте нейросеть для отладки без раскрытия секретов: подготовьте минимальный пример, ожидаемый и фактический результат, текст ошибки и проверяйте гипотезы по одной.

Портрет Григория Щедрина

Григорий Щедрин

ИИ-аналитик

Привет, я Гриша. Когда программа выдаёт ошибку, проще не просить нейросеть «исправить всё», а подготовить воспроизводимый пример. Покажите минимальный код, что вы ожидали получить, что получилось и точный текст ошибки. Модель может предложить гипотезы, но вы должны подтвердить причину тестом. Для диалога о минимальном примере можно использовать SYNTX AI.

Подготовьте безопасный пример

Сократите код до части, которая всё ещё воспроизводит проблему. Укажите язык и версию, команду запуска, входные данные и ожидаемое поведение. Удалите пароли, токены, реальные адреса и персональные сведения. Если проблема связана с закрытым проектом, используйте только разрешённую среду и поделитесь минимальным обезличенным фрагментом.

Сохраните трассировку полностью, если она нужна, но сначала прочитайте последнюю часть и найдите строку, на которой остановилось выполнение. Контекст выше часто показывает, откуда пришёл неверный аргумент.

Попросите объяснить гипотезу

Помоги отладить этот минимальный пример на [язык и версия]. Ожидал [результат], получил [факт]. Ошибка: [точный текст]. Сначала объясни вероятную причину, затем предложи минимальное изменение и один тест, который подтвердит гипотезу. Не переписывай несвязанный код и не добавляй зависимости.

Попросите модель назвать, что она предполагает о среде. Если версия библиотеки неизвестна, проверьте её отдельно. Для новых методов сверяйтесь с официальной документацией, потому что названия функций и параметры меняются.

Пример: сумма равна нулю

Представим функцию, которая принимает список цен и должна вернуть итог. На входе список [12, 8, 5], фактический результат — 0. В сокращённом примере видно, что сумма создаётся внутри цикла заново. Попросите объяснить состояние переменной до и после каждой итерации, не выдавая сразу переписанный вариант.

Проверьте гипотезу на трёх случаях: пустой список, один элемент, несколько элементов. Если после переноса начального значения перед циклом результат для пустого списка должен быть нулём, а для остальных — суммой входа. Затем проверьте, что тип данных ожидаемый; строка 12 может вести себя иначе, чем число 12.

Сделайте только одну правку, запустите тесты и сравните результат. Если проблема осталась, проверьте, что изменённый файл действительно запускается и тест обращается к нужной функции. Это предотвращает ложный вывод «исправление не сработало», когда выполняется старая версия.

Проверяйте исправление и последствия

Запустите исходный пример, соседние граничные случаи и существующие тесты. Убедитесь, что правка не скрывает ошибку исключением и не меняет формат результата для других частей программы. Если модель предложила удалить проверку или отключить предупреждение, выясните, почему оно возникало.

Не вставляйте неизвестную shell-команду без понимания последствий. Попросите разложить её части и используйте тестовую среду. Для работы с файлами или сетью особенно важно знать, какие данные команда читает и изменяет.

Частые ошибки

Большой фрагмент затрудняет поиск причины. Скриншот ошибки без текста усложняет проверку. Запуск кода модели без тестов может перенести проблему дальше. И не стоит публиковать полный лог, если в нём есть секреты.

Записывайте подтверждённую причину и тест, который ловит ошибку. Такой след полезнее, чем просто сохранить исправленный фрагмент без объяснения.

Перед изменением сохраните исходное состояние и зафиксируйте команду, которой воспроизводится сбой. Если ошибка возникает только иногда, укажите последовательность действий и условия среды. Попросите модель предложить способ локально повторить проблему, но избегайте запуска потенциально опасного кода в рабочем окружении. Для сетевой ошибки сначала отделите проблему программы от недоступного сервиса: проверьте адрес, статус ответа и время ожидания. После исправления убедитесь, что обработка не скрывает полезное сообщение и что пользователь получает понятный следующий шаг.

Для ошибки, появившейся после недавней правки, сравните текущую версию с последним известным рабочим состоянием. Изменилось ли входное значение, зависимость или конфигурация? Сузьте диапазон изменений и проверяйте один участок за раз. Если ошибка затрагивает данные пользователей, остановите небезопасный процесс и следуйте процедуре команды, а не экспериментируйте с живыми записями. После локального исправления сообщите команде, какая причина найдена и как тест не даст ей повториться.

Сохраняйте тест с понятным названием, которое описывает ожидаемое поведение.

Частые вопросы

Можно ли дать модели весь проект?

Обычно сначала достаточно минимального примера. Если проблема зависит от нескольких файлов, передавайте только нужные части и учитывайте правила конфиденциальности.

Что если модель предлагает несколько вариантов?

Попросите сравнить их последствия и выберите один для теста. Не применяйте все варианты одновременно.

Нужно ли запускать предложенные тесты?

Да. Проверяйте исходный случай и граничные значения, чтобы убедиться, что исправление решило причину и не сломало соседний сценарий.

Статья была полезна?