Um depurador (em inglês: debugger) é um programa de computador usado para testar outros programas e fazer sua depuração, que consiste em encontrar os defeitos do programa.

Um depurador de Python sendo executado

O código a ser examinado pode estar sendo executado sob uma máquina virtual, uma técnica que permite total flexibilidade de acesso aos estados da máquina virtual, que também é software. Mas os processadores modernos têm muitos recursos, que também facilitam o acesso a instruções do programa. Por exemplo, desde há muito tempo é possível interromper a execução de instruções do programa depurado em qualquer ponto e examinar o conteúdo de suas variáveis.

Quando o programa aborta, o depurador mostra a posição no código fonte original, se for um depurador de código fonte, ou um depurador simbólico. Caso seja um depurador de linguagem de máquina, ele mostra a linha onde ocorreu o problema através de desmontagem. Um programa é abortado quando ele usa uma instrução não disponível (inválida) na CPU, quando tenta acessar memória inexistente ou não disponível para ele, bloqueada pelo mecanismo de proteção. Ou seja: quando tenta acessar devido a defeito ou não, recursos indisponíveis para ele. Em geral, o sistema operacional é que faz com que o programa aborte.

Em geral, os depuradores também oferecem funcionalidades mais sofisticadas, como: a execução passo-a-passo de um programa; a suspensão do programa para examinar seu estado atual, em pontos predefinidos, chamados pontos de parada; o acompanhamento do valor de variáveis que podem ser usadas inclusive para gerar uma suspensão, ou ativar um ponto de parada.

Apesar da importância do uso de depuradores, é bom lembrar que um programa pode se comportar de forma diferente quando executando sob um depurador. O bom humor leva este problema a ser chamado de Heisenbug na literatura especializada, em alusão à incerteza de Heisenberg. Por exemplo, um depurador alterará a velocidade de processamento do programa, o que tanto fará surgir novos problemas de sincronização, quanto poderá mascarar aqueles já existentes. Por esta razão, mesmo os melhores depuradores existentes podem não ser eficazes na solução dos problemas de sincronização muitas vezes presentes em sistemas multitarefa ou distribuídos.

É interessante notar que as mesmas funcionalidades que tornam um depurador útil para o desenvolvedor que precisa eliminar defeitos, podem ser usadas por quem queira quebrar proteção contra cópia, ou fazer um crack de software com alguma limitação de uso.

Muitos programadores—em particular aqueles habituados ao desenvolvimento em ambientes de desenvolvimento integrado, não gostam ou têm dificuldade de trabalhar com depuradores com recursos limitados de interação, como é o caso de depuradores que oferecem apenas uma interface de linha de comando. Em vez disso, preferem usar front-ends que acrescentem funções de visualização e interação mais sofisticadas e flexíveis, principalmente através de interface gráfica com o usuário.

Depuradores e ferramentas de depuração editar

 
Captura de tela do GNU Debugger

Ver também editar

Referências

  • Jonathan B. Rosenberg. How Debuggers Work. Algorithms, Data Structures, and Architecture. [S.l.]: John Wiley & Sons. ISBN 0-471-14966-7