Debugging (Depuração)
O processo de depuração (ou debugging) é a técnica usada para identificar, localizar e corrigir erros (bugs) no código de um programa.
O pdb (Python Debugger) é o depurador embutido no Python. Ele é uma ferramenta poderosa para investigar e corrigir problemas em seu código, permitindo que você execute o código linha a linha, inspecione variáveis, avalie expressões e controle o fluxo de execução.
pdb comandos:
| Comando | Descrição |
|---|---|
help |
Mostra os comandos disponíveis. |
list |
Mostra o código-fonte ao redor da linha atual. |
step ou s |
Avança uma linha e entra em chamadas de funções. |
next ou n |
Avança para a próxima linha no mesmo nível de chamada. |
continue ou c |
Continua a execução até o próximo ponto de parada ou o final. |
print ou p |
Imprime o valor de uma variável ou expressão. |
quit ou q |
Sai do depurador. |
No VSCODE, em seu projeto, já logado na venv, é possivel confgurar a ferramenta de debug. clicando em create a launch.json file é possivel escolher um interpretador para o debug, tendo em vista que deve ter as extensões python da microsot e/ou django instalado em seu projeto, para selecionar como debug. Lembrando que para usar o Django é necessário estar instalado no projeto.

Se for usar o django escolha a opção more python debugger etc....

Segue-se os Passos para debugar um código:
A. Descrever o Problema
Descreva completamente o problema ocorrido, esse é o primeiro passo para identificar erros.
{
"version": "0.2.0",
"configurations": [
{
"name": "Streamlit: Run app",
"type": "debugpy",
"request": "launch",
"module": "streamlit",
"args": [
"run",
"${workspaceFolder}/app.py"
],
"console": "integratedTerminal"
}
]
}
Exemplo de configuração do debbuger do VScode para aplicações streamlit. Lembrando que o arquivo launch.json encontra-se na pasta .vscode.
B. Reproduzir o bug
Processo de depuração é entender e replicar o erro em um ambiente controlado para observar diretamente o comportamento que leva ao problema. A ideia é criar ou encontrar as condições exatas em que o erro ocorre, para entender por que ele acontece e facilitar a identificação da causa.
from random import randint
# lembre-se que listas começam com valor zero
dice_imgs = ["❶", "❷", "❸", "❹", "❺", "❻"]
dice_num = randint(1,6)
# Irá gerar o erro apenas quando alcançar o numero 6
print(dice_imgs[dice_num])
O jeito de reproduzir o bug seria colocando vários números em dice_num para testar!
C. Simule o computador (play computer)
O princípio do play computer no contexto de um debugger é simular a execução do programa passo a passo, como se você fosse o próprio computador. A ideia é "brincar/jogar de ser o computador", manualmente seguindo o fluxo do código para compreender cada linha e observar mudanças nos valores das variáveis, condições de controle e fluxos de execução.
year = int(input("What's your year of birth?"))
if year > 1980 and year < 1994:
print("You are a millenial.")
elif year > 1994:
print("You are a Gen Z.")
D. Corrigir o erro (Fix the error)
Você realiza modificações no código para resolver a causa raiz do problema.
age = input("How old are you?")
if age > 18:
print("You can drive at age {age}.")
Solução 1: converter em um inteiro para a verificação
Solução 2: usar f-string para imprimir a idade
E. Eliminar bug com print (Squash a bug with print statements)
Significa utilizar instruções de impressão (como print() em Python, console.log() em JavaScript, ou System.out.println() em Java) para ajudar a depurar o código e entender o que está causando o bug. É uma abordagem comum para identificar e resolver erros ao imprimir informações no console ou terminal, fornecendo uma maneira de "rastrear" o que está acontecendo no código durante a execução.
pages = 0
word_per_page = 0
pages = int(input("Number of pages: "))
print(pages)
word_per_page == int(input("Number of words per page: "))
print(word_per_page)
total_words = pages * word_per_page
print(total_words)
F. Debugger
O debugger é uma ferramenta que permite pausar a execução do programa e examinar.
import pdb
x = [10, 20, 30]
y = 10
z = 30
print(y+z)
# Pausa o código e abre um terminal pdb para testar o que há de errado em outras linhas.
pdb.set_trace()
print(x+y)
def mutate(a_list):
b_list = []
for item in a_list:
new_item = item * 2
b_list.append(new_item)
print(b_list)
mutate([1,2,3,5,8,13])
Coloque esse código no Python tutor.