Depurador
Um depurador (do inglês de- ( prefixo ; dt. Ent- , aus- ) no sentido de remover e bug em inglês no sentido de erro de programa ) é uma ferramenta para diagnosticar e encontrar erros em sistemas de computador , especialmente em programas , mas também no hardware necessário para a execução . A depuração se refere à atividade de diagnosticar e localizar esses erros, seja usando um depurador ou outros métodos.
Origem do nome
O termo "depuração" (para depuração alemão ) é frequentemente atribuído por Grace Hopper a uma lenda que ela gostava de dizer a si mesma que não é totalmente correta. Em 1947, enquanto trabalhava no Mark II, uma mariposa causou a falha de um relé neste computador. A equipe de Grace Hopper encontrou a mariposa e a colocou no diário de bordo junto com a frase "Primeiro caso real de bug sendo encontrado". Como resultado, o termo “depuração” para “solução de problemas” foi estabelecido na equipe. O termo "bug" (para inseto, besouro, praga) existia em inglês entre os engenheiros desde o século 19 como um termo para mau funcionamento e, portanto, foi mencionado como gíria no Novo Dicionário Internacional Webster desde 1937. Com Fix (Engl. Fix for repair, repair) é chamada a eliminação de um bug de testamento .
Funções de um depurador
- o controle do fluxo do programa, em particular por meio de pontos de interrupção e o processamento de comandos em uma única etapa
- os dados de inspeção , tais. B. os registros, o código do programa atual como assembler ou texto de origem de linguagem de alto nível, os dados gerais em memórias fixas e voláteis, a geração de interpretações de dados avançadas, por exemplo, através de uma funcionalidade de pilha de chamadas ou a exibição de registros de entrada / saída, tabelas e linguagens de alto nível Estruturas
- a modificação de memórias tais. B. a memória principal, os estados de entrada / saída externa e os registros do núcleo do processador
Dependendo do depurador e da natureza do hardware, também é possível receber feedback e estados de erro ( exceções ) do sistema de destino. Erros de acesso à memória, códigos de operação inválidos e sequências de comando para as quais as variáveis de entrada ou saída são questionáveis, como uma tentativa de divisão por zero, são de particular interesse aqui.
Uma distinção básica é feita entre a depuração remota de sistemas remotos e a depuração que é realizada dentro do sistema do processador para ser examinada com recursos integrados. Uma versão especial é a depuração remota usando uma simulação do sistema de destino usando uma simulação de processador e outros elementos. Depurar uma máquina virtual é uma forma intermediária entre os dois tipos, em que a máquina virtual basicamente tem o caráter de um aplicativo local e de um sistema independente. Superar a arquitetura do processador requer pelo menos fundamentalmente um certo esforço.Dependendo da concepção, até mesmo determinações precisas do comportamento do tempo de execução são possíveis durante a depuração. B. uma simulação não precisa necessariamente ser executada em tempo real. No caso de simulações de semicondutores na categoria ASIC , FPGA ou PLC , tanto as simulações de hardware quanto de software são ferramentas comuns acessíveis ao desenvolvedor por meio de um depurador especial.
A solução de problemas simples no nível do montador é possível a qualquer momento com um sistema projetado para essa finalidade. Algumas linguagens de alto nível, como scripts ou várias variantes do BASIC, por outro lado, muitas vezes só podem ser examinadas com base em linha no nível do texto de origem. Funcionalidades estendidas, por exemplo Por exemplo, símbolos, estruturas e nomes de funções podem ser resolvidos com a presença de informações de símbolos em um arquivo especial ou incorporados em um programa binário (por exemplo, informações de depuração DWARF). Depurador avançado e sistemas de desenvolvimento ainda podem usar, por exemplo, B. registrar dados durante a operação, preparar análises de desempenho e visualizar processos simultâneos .
Um depurador é sistematicamente mais comparável ao que é feito em engenharia elétrica e eletrônica por meio de dispositivos e auxiliares de medição típicos, por exemplo, B. um testador lógico, um multímetro, um osciloscópio ou um gerador de sinal estão disponíveis como opções para o comissionamento e monitoramento dos sistemas correspondentes.
Os depuradores modernos têm a opção de traduzir as alterações no texto fonte diretamente durante a execução do programa e, em seguida, continuar o programa. Essa técnica também é conhecida como depuração just in time . Um depurador geralmente faz parte de um ambiente de desenvolvimento de programa .
Além disso, um depurador também pode ser usado em engenharia reversa para entender melhor e mais rapidamente os programas de terceiros rastreando e examinando variáveis.
Em sistemas de tempo de execução orientados a objetos , em programação paralela ou em sistemas distribuídos , é muito difícil ou mesmo impossível na prática definir uma seqüência exata de programa. Alguns sistemas de desenvolvimento, portanto , não usam depuradores de tempo de execução , mas geralmente permitem a definição de pontos de interrupção nos quais o status de todas as variáveis pode ser analisado após a parada do programa. Os depuradores post-mortem também são usados neste contexto para tratamento de exceções , ou seja , após interrupções do programa que são forçadas, por exemplo, por um erro .
Breakpoints
A habilidade mais importante de um depurador é definir pontos de interrupção . Eles permitem interromper sua execução em qualquer ponto de um programa e, assim, possibilitar o exame dos registros e da memória.
Na maioria das vezes, são usados pontos de interrupção de software, que alteram temporariamente um byte no programa a ser examinado. Este byte é a instrução para disparar uma interrupção de ponto de interrupção , para parar a execução do programa quando o byte é alterado.
No entanto, esta opção inclui a restrição de que o programa a ser examinado pode não verificar sua integridade (por exemplo, verificando uma soma de verificação , consulte também verificação cíclica de redundância ). Os programadores de malware exploram essa fraqueza dos pontos de interrupção de software, por exemplo, para tornar a análise de um programa malicioso mais difícil ou até mesmo evitá-la.
Os pontos de interrupção de hardware não estão sujeitos a essa restrição, pois não alteram o programa a ser examinado. Os pontos de interrupção de hardware são implementados diretamente no processador; no entanto, isso tem recursos limitados para isso, de modo que apenas um número limitado desses pontos de interrupção estão disponíveis.
Muitos depuradores permitem que o programador defina pontos de interrupção condicionais. Além da instrução onde a execução do programa deve ser interrompida, o programador também especifica a instrução para uma expressão booleana . O depurador apenas interrompe a execução do programa quando a linha de código especificada for alcançada e a expressão booleana for verdadeira ao mesmo tempo.
No entanto, para que o depurador possa testar se a expressão booleana é verdadeira, ele deve interromper temporariamente a execução do programa e verificar a expressão booleana, após o que o depurador continua a execução do programa ou deixa o programa no estado interrompido.
Ferramentas usadas para solucionar problemas
Programas
- Compuware Xpediter - z / OS Debugger
- DDT - depurador DEC / CP / M
- DEBUG.EXE - Depurador MS-DOS
- gdb - o depurador GNU, uma ferramenta Unix
- HiTOP - Debugger / IDE das ferramentas de desenvolvimento Hitex
- IBM Debug Tool - z / OS Debugger e IDE
- iSYSTEM BlueBox com winIDEA - Depurador no circuito para sistemas embarcados
- Lauterbach TRACE32 - Depurador no circuito para sistemas embarcados
- SEGGER Ozone - Depurador para Sistemas Embarcados
- ltrace - mostra biblioteca dinâmica e chamadas de sistema no Linux
- Microsoft Visual Studio IDE Debugger + Remote Debugger integrado
- OllyDbg - Depurador com GUI para sistemas operacionais Windows
- SoftICE - depurador modo Kernel para DOS e Microsoft Windows até Windows XP ( 1987-2000 (última publicação))
- strace ( Linux ), truss ( Solaris ), DTrace (macOS) - mostra as chamadas do sistema
- The Interactive Disassembler - Disassembler para muitas arquiteturas de computador; também inclui um depurador para a arquitetura x86
- TOD - um chamado depurador onisciente para Java
- Turbo Debugger da Borland
- valgrind - para depuração e criação de perfil de programas x86 Linux
- Visual DuxDebugger - Debugger Disassembler para Windows de 64 bits
- WinDbg , KD / CDB, NTSD - depurador do Windows para sistemas x86, Itanium e x64, parte das ferramentas de depuração para Windows
- W32DASM - Depurador e Desmontador
- x64dbg - Depurador com GUI para sistemas operacionais Windows
hardware
Veja também
literatura
- David J. Agans: Debugging: The Nine Indispensable Rules for Find Even the Most Elusive Software and Hardware Problems , AMACOM, 2002, ISBN 0-8144-7168-4 .
- Ann R. Ford, Toby J. Teorey: Practical Debugging in C ++ , Prentice Hall, 2002, ISBN 0-13-065394-2 .
- Matthew A. Telles, Yuan Hsieh, Matt Telles: The Science of Debugging , The Coriolis Group, 2001, ISBN 1-57610-917-8 .
- Andreas Zeller : Why Programs Fail: A Guide to Systematic Debugging , Dpunkt Verlag, 2005, ISBN 3-89864-279-8 .
- Thorsten Grötker, Ulrich Holtmann, Holger Keding, Markus Wloka: The Developer's Guide to Debugging , 2ª edição, CreateSpace Independent Publ., 2012, ISBN 978-1-4701-8552-7 .
- John Robbis: Depurando aplicativos Microsoft .NET 2.0, prático (...) com Visual Studio 2005 , alemão, MicrosoftPress Germany, 2007, ISBN 978-3-86645-408-8
Links da web
- Por que os programas falham - Site para o livro Por que os programas falham, de A. Zeller, com exemplos de programas e material de ensino (600 slides!)