Localizar e corrigir bugs no código pode ser frustrante, especialmente quando você é um novo desenvolvedor. A boa notícia é que ferramentas como o GitHub Copilot podem identificar e eliminar os bugs rapidamente, permitindo que você se concentre em um trabalho mais criativo e interessante.
Pré-requisitos
Os exemplos deste artigo consideram que você esteja usando o GitHub Copilot para depurar um projeto Python no VS Code (Visual Studio Code). Para seguir os exemplos, você precisa:
- Concluir Configurar o Visual Studio Code com o Copilot na documentação do Visual Studio Code.
- Baixar o Python.
- Instalar a extensão do Python para o Visual Studio Code.
Como aprender a depurar por meio de exemplos
Há duas situações principais que você encontrará ao tentar executar um código com bugs:
- O código é fechado antes de terminar de ser executado e você recebe uma mensagem de erro.
- O código é executado sem erros, mas a saída é diferente do esperado.
A boa notícia é que o Copilot pode ajudar a depurar seu código em ambas as situações. Para saber como fazer isso, acompanhe os exemplos a seguir.
Como depurar um erro com o GitHub Copilot
Ao executar um código com bugs, você geralmente receberá uma mensagem de erro. A mensagem informa o arquivo e a linha em que o erro ocorreu e descreve brevemente o que deu errado. No entanto, as mensagens de erro podem ser confusas. Para entender por completo e corrigir o bug, podemos pedir ajuda ao Copilot.
Vamos experimentar fazer isso com o arquivo bugged_dice_battle.py
do repositório new2code/debug-with-copilot
. Esse programa simula uma batalha de dados entre dois jogadores usando o seguinte código:
# Import the random module to easily generate pseudo-random numbers
import random
# Define a function that simulates a dice battle between two players
def dice_battle():
# Generate random numbers between 1 and 6 for each player's die roll
die_1 = random.randint(1, 6)
die_2 = random.randint(1, 6)
# Compare the die rolls and return the result as a string
if die_1 > die_2:
return "Player 1 rolled a " + die_1 + " and Player 2 rolled a " + die_2 + ". Player 1 wins!"
elif die_1 < die_2:
return "Player 1 rolled a " + die_1 + " and Player 2 rolled a " + die_2 + ". Player 2 wins!"
else:
return "Player 1 rolled a " + die_1 + " and Player 2 rolled a " + die_2 + ". It's a tie!"
print(dice_battle())
Primeiro, precisamos clonar o repositório localmente:
-
No VS Code, abra a paleta de comandos pressionando Cmd+Shift+P (Mac) ou Ctrl+Shift+P (Windows/Linux).
-
Digite
Git: Clone
e pressione Enter. -
Cole a URL do repositório
new2code/debug-with-copilot
:Text https://github.com/new2code/debug-with-copilot
https://github.com/new2code/debug-with-copilot
-
Pressione ENTER e escolha um local para salvar o repositório no computador.
-
Quando solicitado, abra o repositório no VS Code.
Agora que clonamos o repositório, vamos executar bugged_dice_battle.py
para ver a saída:
-
Abra a paleta de comandos pressionando Cmd+Shift+P (Mac) ou Ctrl+Shift+P (Windows/Linux).
-
Digite
Terminal: Create New Terminal
e pressione Enter. -
Se estiver usando o Mac ou o Linux, na guia do terminal, cole o seguinte código:
Shell python bugged_dice_battle.py
python bugged_dice_battle.py
Caso contrário, se estiver usando o Windows, cole o seguinte código:
Shell py bugged_dice_battle.py
py bugged_dice_battle.py
-
Pressione ENTER para executar o programa.
Infelizmente, recebemos um texto de erro no terminal que termina com a seguinte mensagem: TypeError: can only concatenate str (not "int") to str
. Para entender o que isso significa, pressione Command+Shift+I (Mac) ou Ctrl+Alt+I (Windows/Linux) para abrir o Copilot Chat. Depois, cole e envie a seguinte solicitação:
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
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
O Copilot responderá que o erro ocorre porque estamos tentando concatenar os inteiros die_1
e die_2
com cadeias de caracteres, e só é possível concatenar cadeias de caracteres com cadeias de caracteres. Em seguida, ele fornecerá uma versão atualizada do código que corrige o bug usando a função str()
para converter os inteiros em cadeias de caracteres antes de concatená-los.
Como depurar uma saída incorreta com o GitHub Copilot
Às vezes, o código com bugs é executado sem gerar nenhum erro, mas a saída está claramente incorreta. Nesse caso, a depuração pode ser mais difícil porque o VS Code não pode informar o local ou a descrição do bug.
Para esses bugs “invisíveis”, o Copilot é particularmente útil. Vamos ter uma experiência prática usando o arquivo bugged_factorial_finder.py
do repositório new2code/debug-with-copilot
. O programa Python deve calcular um fatorial e contém o seguinte código:
# Initialize the factorial result to 1
factorial = 1
# Initialize the input number to 6
number = 6
# Loop from 1 to number (inclusive) and multiply factorial by each number
for i in range(1, number + 1):
factorial *= factorial * i
print(f"The factorial of {number} is {factorial}")
Como já clonamos o repositório localmente, vamos executar bugged_factorial_finder.py
para ver a saída:
-
No VS Code, abra a paleta de comandos pressionando Cmd+Shift+P (Mac) ou Ctrl+Shift+P (Windows/Linux).
-
Digite
Terminal: Create New Terminal
e pressione Enter. -
Se estiver usando o Mac ou o Linux, na guia do terminal, cole o seguinte código:
Shell python bugged_factorial_finder.py
python bugged_factorial_finder.py
Caso contrário, se estiver usando o Windows, cole o seguinte código:
Shell py bugged_factorial_finder.py
py bugged_factorial_finder.py
-
Pressione ENTER para executar o programa.
Infelizmente, o código não funciona conforme o esperado. Queremos que ele retorne 720
, o valor correto do fatorial de 6, mas a saída é muito maior do que isso.
Para entender o que deu errado, com o arquivo bugged_factorial_finder.py
aberto no VS Code, abra o Copilot Chat e envie a seguinte solicitação:
Why is the output of this code so much higher than expected? Please explain in depth and suggest a solution.
Why is the output of this code so much higher than expected? Please explain in depth and suggest a solution.
O Copilot apontará que, como estamos usando o operador *=
, estamos multiplicando factorial
por i
e por factorial
. Em outras palavras, estamos multiplicando-o por um factorial
extra para cada iteração do loop.
Para corrigir esse erro, o Copilot vai sugerir um código que remove o factorial
extra da equação ou que altera o operador *=
para =
.
Como depurar seu projeto
Agora que você praticou a depuração de alguns programas simples com o Copilot, você pode usar as mesmas metodologias para localizar e corrigir bugs ocultos no seu trabalho.
Por exemplo, para depurar uma mensagem de erro gerada pelo código, envie ao Copilot a seguinte solicitação:
Explain in depth why my code produces the following error and how I can fix it: YOUR-ERROR-MESSAGE
Explain in depth why my code produces the following error and how I can fix it:
YOUR-ERROR-MESSAGE
Caso contrário, se você estiver depurando uma saída incorreta, pergunte ao Copilot por que a saída está incorreta e como corrigi-la. Para ter os melhores resultados, dê o máximo de contexto possível sobre como a saída é diferente das suas expectativas.
Com essas táticas, você tem tudo o que precisa para começar a eliminar os bugs no seu projeto.
Próximas etapas
Conforme você prossegue com a codificação, é provável que encontrará cenários de problemas específicos e erros difíceis de serem depurados. Para ver uma lista de possíveis problemas e exemplos de solicitações do Copilot Chat de como corrigi-los, confira Depurando erros.