Como depurar programas #Python 🐍 através da linha de comando. 🐛 #debugging #debug

#DicaDePythonCodeShow

🧵
A maneira mais fácil de interagir com um script Python é usando o argumento `-i` (interactive) no python ou no ipython.

$ ipython -i script.py

O script é executado e então o terminal interativo abre permitindo a inspeção do estado das variáveis.
Para uma depuração mais estruturada o melhor é o pdb que é o debugger built-in do Python docs.python.org/3/library/pdb.…

Executar e parar na linha 5
$ python -m pdb -c "until 5" script.py

O script é executado e então ao chegar na linha 5 o interpretador pausa.
Também é possível entrar no debugger sempre que ocorrer um erro.

$ python -m pdb -c continue script.py

Em qualquer Exception ao invés de "estourar" o erro, o debugger é acionado.
Para adicionar um breakpoint no seu código basta usar:

`__import__("pdb").set_trace()`

Outra opção a partir do Python 3.7 é usar a keyword `breakpoint()` que por padrão acionará o `pdb.set_trace`
O pdb é legal mas falta cor e facilidades, para isso existe o pdbr (pdb + rich)

Instalação e configuração:

$ pip install pdbr
$ export PYTHONBREAKPOINT=pdbr.set_trace

basta colocar `breakpoint()` na linha que deseja debugar.
O pdbr tem facilidades como colorização, histórico, comandos adicionais como `v` (exibir variaveis) e `vl` (exibir variaveis locais) e tudo isso formatado, colorido e com os helpers do ipython.

Ele também permite debugar projetos mais complexos, como aplicações Django.
Se prefere um debugger mais visual porém sem sair do terminal temos o pudb.

$ pip install pudb
$ export PYTHONBREAKPOINT=pudb.set_trace

ou

$ python -m pudb script.py

O legal é que dá para colocar breakpoints interativamente e tem um shell integrado.
Caso o programa que você quer debugar está localizado remotamente ou dentro de um container #docker é possível debugar via TCP com o sdb.

Remoto
$ pip install sdb
$ export PYTHONBREAKPOINT=sdb.set_trace

Local:
$ pip install sdb
$ sdb-listen
O sdb tem também uma feature bacana que permite o uso de SIGTRAP para iniciar o debugger, sendo assim quando temos aquele processo que fica travado e não sabemos o que tá acontecendo, podemos usar `kill -5 <pid>` para iniciar o debugger remotamente sem parar o processo.
Para debugar remotamente ainda temos o web-pdb

$ pip install web-pdb

que funciona igual, mas para acessar o debugger vc aponta seu browser para uma porta especifica.
Todas essas ferramentas seguem o padrão `pdb` e portanto é possível customizar usando um arquivo chamado `~/.pdbrc` e o legal é que podemos criar aliases para comandos repetitivos.

gist.github.com/rochacbruno/f5…

Essa dica aprendi com o Adrian que trabalha comigo.
Para quem prefere uma experiência GUI ainda tem o WinPDB (eu pessoalmente não gosto) mas ele segue o mesmo padrão de todos.

$ pip install winpdb-reborn
$ winpdb script.py
ainda neste tema de debugging ainda tem mais coisas interessantes como rewind, situações onde não se pode colocar um breakpoint, post morten, debugger em filas, debugger em código async.

Para isso aqui não ficar enorme eu abordo essas questões depois.
Este conteúdo aqui eu tava guardando para preparar um vídeo no Youtube.com/CodeShowBR mas como estou sem condições/tempo de gravar resolvi colocar aqui mesmo. (se inscreve lá para dar uma força)
Sobre publicar essas dicas compiladas em 🧵 do twitter o que acham?
E mais uma questão, se eu compilar dicas aqui na próxima semana o que prefere?
Valeu! e manda mais dicas de debugging :) #python
E aproveita para deixar aquele RT no primeiro tweet desse fio :) valeu!

• • •

Missing some Tweet in this thread? You can try to force a refresh
 

Keep Current with Bruno Rocha ❁

Bruno Rocha ❁ Profile picture

Stay in touch and get notified when new unrolls are available from this author!

Read all threads

This Thread may be Removed Anytime!

PDF

Twitter may remove this content at anytime! Save it as PDF for later use!

Try unrolling a thread yourself!

how to unroll video
  1. Follow @ThreadReaderApp to mention us!

  2. From a Twitter thread mention us with a keyword "unroll"
@threadreaderapp unroll

Practice here first or read more on our help page!

More from @rochacbruno

14 Jul 20
Thread
Dicas de Streaming de #LiveCoding na #Twitch.

1. Não leve esse tweet tão a sério, são apenas dicas, você pode simplesmente ignorar se não gostar.
2. O chat é o mais importante, mesmo que seu conteúdo seja fantástico ele não será a mesma coisa sem a interação com o chat
3. Mas não exagere, é preciso achar um balanço entre conteúdo técnico e entretenimento. (timers ajudam)
Read 22 tweets
24 Nov 19
Vocês estão sabendo do pyjamas.live?

Primeira conferência de #Python em Português 100% online que vai acontecer durante 24h começando em 13 de Dezembro as 16h.

Segue o fio.
e dá um RT para ajudar o evento :)
O incentivo para esta conferência é possibilitar que pessoas de todos os lugares possam participar, não só como expectadores mas também como palestrantes.
Teremos duas maneiras de participação, uma é para quem ia cria conteúdo e já tem seu canal no YouTube ou Twitch para fazer uma live sobre #python em qualquer horário durante as 24h do evento.
Read 14 tweets

Did Thread Reader help you today?

Support us! We are indie developers!


This site is made by just two indie developers on a laptop doing marketing, support and development! Read more about the story.

Become a Premium Member ($3/month or $30/year) and get exclusive features!

Become Premium

Too expensive? Make a small donation by buying us coffee ($5) or help with server cost ($10)

Donate via Paypal Become our Patreon

Thank you for your support!

Follow Us on Twitter!