# Учусь отладке с помощью GitHub Copilot

Определите и исправьте ошибки в коде, запросив GitHub Copilot для справки.

Поиск и исправление ошибок в коде может быть разочарованием, особенно при создании нового разработчика. К счастью, такие инструменты, как GitHub Copilot могут быстро выявлять и сквашировать ошибки, позволяя сосредоточиться на более творческой, интересной работе.

## Необходимые компоненты

Примеры в этой статье предполагают, что вы используете GitHub Copilot для отладки Python проекта в Visual Studio Code (VS Code). Чтобы выполнить следующие примеры, необходимо:

* Выполните настройку [Visual Studio Code с помощью Copilot](https://code.visualstudio.com/docs/copilot/setup-simplified) в документации по Visual Studio Code.
* [Скачать Python](https://www.python.org/downloads/).
* Установите расширение [Python для Visual Studio Code](https://marketplace.visualstudio.com/items?itemName=ms-python.python).

## Обучение отладке с помощью примеров

При попытке запустить код с ошибкой возникает две основные ситуации:

* Код завершает работу до завершения работы и получает сообщение об ошибке.
* Код выполняется без ошибок, но выходные данные отличаются от ожидаемых.

К счастью, Copilot может помочь отладить код в обоих ситуациях. Чтобы узнать, как это сделать, ознакомьтесь со следующими примерами.

### Отладка ошибки с помощью GitHub Copilot

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

Давайте рассмотрим пример репозитория: [`new2code/debug-with-copilot`](https://github.com/new2code/debug-with-copilot)

#### Клонирование примера репозитория

Сначала необходимо создать локальную копию репозитория:

1. [Начните клонирование репозитория new2code/debug-with-copilot](vscode://vscode.git/clone?url=https://github.com/new2code/debug-with-copilot) в VS Code. <!-- markdownlint-disable-line GHD003 -->
2. Выберите расположение для сохранения репозитория на компьютере, а затем нажмите кнопку **"Выбрать в качестве назначения** репозитория".
3. При появлении запроса откройте репозиторий.

#### Запуск файла с ошибками

Теперь давайте запустите [`bugged_dice_battle.py`](https://github.com/new2code/debug-with-copilot/blob/main/bugged_dice_battle.py) файл. Эта программа имитирует битву за кости между двумя игроками.

1. В VS Codeоткройте и просмотрите `bugged_dice_battle.py` файл.

2. Откройте палитру команд, нажав <kbd>Ctrl</kbd>+<kbd>Shift</kbd>+<kbd>P</kbd> (Windows/Linux) или <kbd>Cmd</kbd>+<kbd>Shift</kbd>+<kbd>P</kbd> (Mac).

3. Введите `Terminal: Create New Terminal` и нажмите клавишу <kbd>ВВОД</kbd>.

4. На вкладке терминала вставьте следующую команду.

   Windows:

   ```shell copy
   py bugged_dice_battle.py
   ```

   Mac или Linux:

   ```shell copy
   python bugged_dice_battle.py
   ```

5. Нажмите клавишу <kbd>ВВОД</kbd> , чтобы запустить программу.

К сожалению, в терминале мы получаем текст ошибки, заканчивающийся следующим сообщением:

> TypeError: может только сцепить str (не int) для str

#### Отладка файла

Чтобы понять, что означает эта ошибка, [open Копилот Чат в VS Code](vscode://GitHub.Copilot-Chat?ref_product=copilot\&ref_type=engagement\&ref_style=text), затем вставьте и отправьте следующий запрос: <!-- markdownlint-disable-line GHD003 -->

```text copy
Explain in depth why my code produces the following error and how I can fix it:

TypeError: can only concatenate str (not "int") to str
```

Copilot будет отвечать на ошибку, так как мы пытаемся объединить целые `die_1` числа и `die_2` строки, и вы можете объединять только строки со строками.

Он также предоставит обновленную **версию нашего кода** , которая исправляет ошибку с помощью `str()` функции для преобразования целых чисел в строки перед объединением их. Выполните последний шаг отладки, применив к файлу предложение Copilot.

### Отладка неправильного вывода с помощью GitHub Copilot

Иногда ошибка выполняется без возникновения ошибок, но выходные данные явно неверны. В этом случае отладка может быть сложнее, так как VS Code не может сообщить о расположении или описании ошибки.

Для этих "невидимых" ошибок Copilot особенно полезно. Давайте получим практический опыт работы с другим файлом в нашем примере репозитория: `bugged_factorial_finder.py` Это программа на Python, которая должна вычислять факториал.

#### Запуск файла с ошибками

Сначала давайте запустите программу, чтобы увидеть неверные выходные данные:

1. Откройте и просмотрите `bugged_factorial_finder.py` файл.

2. В созданном ранее терминале вставьте следующую команду.
   Windows:

   ```shell copy
   py bugged_factorial_finder.py
   ```

   Mac или Linux:

   ```shell copy
   python bugged_factorial_finder.py
   ```

3. Нажмите клавишу <kbd>ВВОД</kbd> , чтобы запустить программу.

К сожалению, код не работает должным образом. Мы хотим, чтобы он возвращался `720`, правильное значение 6 факториальных, но выходные данные гораздо выше, чем это.

#### Отладка файла

Чтобы понять, что пошло не так, [open Копилот Чат](vscode://GitHub.Copilot-Chat?ref_product=copilot\&ref_type=engagement\&ref_style=text) и отправьте следующий запрос: <!-- markdownlint-disable-line GHD003 -->

```text copy
Why is the output of this code so much higher than expected? Please explain in depth and suggest a solution.
```

Copilot указывает на то, что, поскольку мы используем `*=` оператор, мы фактически умножаемся `factorial` на оба `i`**и**`factorial`. Другими словами, мы умножаем дополнительные `factorial` значения для каждой итерации цикла.

Чтобы устранить эту ошибку, Copilot предложит код, который удаляет дополнительные `factorial` данные из уравнения или изменяет `*=` оператор `=`на . Внесите это изменение сейчас!

## Отладка собственного проекта

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

Например, чтобы выполнить отладку сообщения об ошибке, созданного кодом, отправьте Copilot в следующем запросе:

```text copy
Explain in depth why my code produces the following error and how I can fix it:

YOUR-ERROR-MESSAGE
```

В противном случае, если вы отладите неправильные выходные данные, попросите Copilot, почему выходные данные неверны и как его можно исправить. Для получения наилучших результатов предоставьте максимально возможный контекст о том, как выходные данные отличаются от ваших ожиданий.

С помощью этой тактики вы хорошо оснащены, чтобы начать сквашировать ошибки в вашем проекте!

## Следующие шаги

При продолжении написания кода вы, вероятно, столкнетесь с конкретными сценариями проблем и ошибками, которые сложно отлаживать. Список потенциальных проблем и пример запроса Копилот Чат, чтобы устранить их, см. в разделе [Ошибки отладки](/ru/copilot/copilot-chat-cookbook/debugging-errors).