Как найти ошибку в коде с помощью ИИ
Используйте нейросеть для отладки без раскрытия секретов: подготовьте минимальный пример, ожидаемый и фактический результат, текст ошибки и проверяйте гипотезы по одной.
Привет, я Гриша. Когда программа выдаёт ошибку, проще не просить нейросеть «исправить всё», а подготовить воспроизводимый пример. Покажите минимальный код, что вы ожидали получить, что получилось и точный текст ошибки. Модель может предложить гипотезы, но вы должны подтвердить причину тестом. Для диалога о минимальном примере можно использовать SYNTX AI.
Подготовьте безопасный пример
Сократите код до части, которая всё ещё воспроизводит проблему. Укажите язык и версию, команду запуска, входные данные и ожидаемое поведение. Удалите пароли, токены, реальные адреса и персональные сведения. Если проблема связана с закрытым проектом, используйте только разрешённую среду и поделитесь минимальным обезличенным фрагментом.
Сохраните трассировку полностью, если она нужна, но сначала прочитайте последнюю часть и найдите строку, на которой остановилось выполнение. Контекст выше часто показывает, откуда пришёл неверный аргумент.
Попросите объяснить гипотезу
Помоги отладить этот минимальный пример на [язык и версия]. Ожидал [результат], получил [факт]. Ошибка: [точный текст]. Сначала объясни вероятную причину, затем предложи минимальное изменение и один тест, который подтвердит гипотезу. Не переписывай несвязанный код и не добавляй зависимости.
Попросите модель назвать, что она предполагает о среде. Если версия библиотеки неизвестна, проверьте её отдельно. Для новых методов сверяйтесь с официальной документацией, потому что названия функций и параметры меняются.
Пример: сумма равна нулю
Представим функцию, которая принимает список цен и должна вернуть итог. На входе список [12, 8, 5], фактический результат — 0. В сокращённом примере видно, что сумма создаётся внутри цикла заново. Попросите объяснить состояние переменной до и после каждой итерации, не выдавая сразу переписанный вариант.
Проверьте гипотезу на трёх случаях: пустой список, один элемент, несколько элементов. Если после переноса начального значения перед циклом результат для пустого списка должен быть нулём, а для остальных — суммой входа. Затем проверьте, что тип данных ожидаемый; строка 12 может вести себя иначе, чем число 12.
Сделайте только одну правку, запустите тесты и сравните результат. Если проблема осталась, проверьте, что изменённый файл действительно запускается и тест обращается к нужной функции. Это предотвращает ложный вывод «исправление не сработало», когда выполняется старая версия.
Проверяйте исправление и последствия
Запустите исходный пример, соседние граничные случаи и существующие тесты. Убедитесь, что правка не скрывает ошибку исключением и не меняет формат результата для других частей программы. Если модель предложила удалить проверку или отключить предупреждение, выясните, почему оно возникало.
Не вставляйте неизвестную shell-команду без понимания последствий. Попросите разложить её части и используйте тестовую среду. Для работы с файлами или сетью особенно важно знать, какие данные команда читает и изменяет.
Частые ошибки
Большой фрагмент затрудняет поиск причины. Скриншот ошибки без текста усложняет проверку. Запуск кода модели без тестов может перенести проблему дальше. И не стоит публиковать полный лог, если в нём есть секреты.
Записывайте подтверждённую причину и тест, который ловит ошибку. Такой след полезнее, чем просто сохранить исправленный фрагмент без объяснения.
Перед изменением сохраните исходное состояние и зафиксируйте команду, которой воспроизводится сбой. Если ошибка возникает только иногда, укажите последовательность действий и условия среды. Попросите модель предложить способ локально повторить проблему, но избегайте запуска потенциально опасного кода в рабочем окружении. Для сетевой ошибки сначала отделите проблему программы от недоступного сервиса: проверьте адрес, статус ответа и время ожидания. После исправления убедитесь, что обработка не скрывает полезное сообщение и что пользователь получает понятный следующий шаг.
Для ошибки, появившейся после недавней правки, сравните текущую версию с последним известным рабочим состоянием. Изменилось ли входное значение, зависимость или конфигурация? Сузьте диапазон изменений и проверяйте один участок за раз. Если ошибка затрагивает данные пользователей, остановите небезопасный процесс и следуйте процедуре команды, а не экспериментируйте с живыми записями. После локального исправления сообщите команде, какая причина найдена и как тест не даст ей повториться.
Сохраняйте тест с понятным названием, которое описывает ожидаемое поведение.
Частые вопросы
Можно ли дать модели весь проект?
Обычно сначала достаточно минимального примера. Если проблема зависит от нескольких файлов, передавайте только нужные части и учитывайте правила конфиденциальности.
Что если модель предлагает несколько вариантов?
Попросите сравнить их последствия и выберите один для теста. Не применяйте все варианты одновременно.
Нужно ли запускать предложенные тесты?
Да. Проверяйте исходный случай и граничные значения, чтобы убедиться, что исправление решило причину и не сломало соседний сценарий.