15.12.2022 Views

Python Eficaz

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Porém, essas ferramentas não são suficientes para encontrar todo e qualquer bug.

Quando for preciso um remédio mais potente, é hora de tentar o interactive

debugger, um depurador interativo do Python. Esse depurador permite

inspecionar os estados do programa, mostrar variáveis locais e varrer passo a

passo um programa em Python, uma instrução por vez.

Em muitas linguagens de programação usamos o depurador para especificar em

qual linha de um arquivo-fonte deve parar, e executar o programa a partir daí (os

chamados breakpoints). No Python, é mais fácil modificar diretamente nosso

programa para iniciar o depurador imediatamente antes de onde achamos que

haja um problema que mereça ser investigado. Não há diferença entre rodar um

programa em Python sob um depurador e rodá-lo normalmente.

Para iniciar o depurador, tudo o que precisamos fazer é importar o módulo nativo

pdb e executar sua função set_trace. Normalmente isso é feito em uma única

linha para que os programadores possam facilmente desabilitá-la com um

comentário, ou seja, iniciando a linha com o caractere #.

def complex_func(a, b, c):

# ...

import pdb; pdb.set_trace()

No momento em que essa instrução é executada, o programa entra em pausa. O

terminal que iniciou o programa transforma-se em um shell interativo do Python.

-> import pdb; pdb.set_trace()

(Pdb)

No prompt (Pdb) podemos digitar o nome de uma variável local para ver seu

valor. Podemos ver uma lista de todas as variáveis locais chamando a função

locals. Podemos importar módulos, inspecionar o estado global do programa,

construir novos objetos, chamar a função nativa help e mesmo modificar partes

do programa – o que quer que seja necessário para ajudar na depuração. Além

disso, o depurador tem três comandos que facilitam a inspeção:

• bt: Mostra na tela o histórico (backtrace ou traceback) atual da pilha de

execução. Isso permite saber em que ponto estamos do programa e como

chegamos até o ponto de disparo pdb.set_trace.

• up: Move o escopo um nível acima na pilha de chamadas de função, ou seja,

para nível do chamador da função atual. Isso permite inspecionar as variáveis

www.full-ebook.com

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!