-
Introdução ao rr
- rr é uma ferramenta de depuração para C/C++ no Linux, criada para complementar o gdb
- É possível registrar uma falha uma única vez e depurá-la repetidamente a partir desse registro
- Permite depurar reproduzindo exatamente a mesma execução todas as vezes
- Oferece execução reversa eficiente por meio do gdb
-
Recursos do rr
- Baixo overhead
- Suporte para gravação e reprodução de vários aplicativos (Firefox, Chrome, QEMU, LibreOffice etc.)
- Permite gravar, reproduzir e depurar cargas de trabalho com múltiplos processos
- Suporte a scripts do gdb e integração com IDEs
- Arquivos de rastreamento duráveis e compactados, que podem ser movidos entre máquinas
- Oferece um modo de caos para reproduzir bugs intermitentes
-
Experiência de depuração com rr
- Gravar o aplicativo:
rr record /your/application --args...
- Depurar a execução gravada:
rr replay
- Depuração determinística do rastreamento gravado
- É possível usar os comandos comuns do gdb
- A execução reversa permite chegar rapidamente ao ponto do problema
-
Vídeos
- Vídeo de demonstração de gravação e reprodução do Firefox
- Vídeo explicando em detalhes os recursos básicos do rr
- Vídeo de palestra técnica avançada de Robert O'Callahan
-
Primeiros passos
- Compilar a partir do código-fonte: recomendado caso os pacotes não funcionem
- Instruções de instalação para Fedora e Ubuntu
-
Contexto e motivação
- Desenvolvido para facilitar a depuração de falhas intermitentes
- Com a reprodução determinística, as informações obtidas durante a depuração permanecem válidas
- A execução reversa torna o processo de depuração mais fácil
- rr é usado regularmente em muitos projetos grandes e pequenos
-
Como o rr funciona
- Registra processos em espaço de usuário no Linux e captura todas as entradas vindas do kernel
- Na reprodução, garante o fluxo de controle no nível de instrução, além do conteúdo de memória e registradores
- Layout de memória, endereços de objetos, valores de registradores etc. permanecem idênticos
- Fica ainda mais poderoso quando usado com fuzzers e injetores aleatórios de falhas
-
O contexto do rr
- Depuração com gravação e reprodução é uma ideia antiga
- Metas de projeto com foco no Firefox
- Facilidade de implantação: roda em kernels Linux comuns, sem exigir mudanças na configuração do sistema
- Baixo overhead em tempo de execução
- Projeto simples: evita técnicas complexas
-
Limitações
- Emula uma máquina de núcleo único
- Não é possível registrar processos que compartilham memória com algo fora da árvore de gravação
- Requer uma CPU x86 moderna ou determinadas CPUs ARM
- Exige conhecimento de todas as chamadas de sistema executadas pelo processo gravado
- Exige adaptação a mudanças no kernel, atualizações de bibliotecas do sistema e novas famílias de CPU
-
Materiais adicionais
- Relatório técnico estendido
- Wiki do rr
- É possível fazer perguntas na mailing list ou no canal #rr do chat.mozilla.org
Resumo do GN⁺
- rr é uma ferramenta poderosa para depuração de C/C++ no Linux, melhorando bastante a eficiência com reprodução determinística
- Suporta vários aplicativos e cargas de trabalho com múltiplos processos, sendo prática graças ao baixo overhead
- O recurso de execução reversa torna o processo de depuração mais fácil
- É útil de forma geral por conseguir depurar aplicativos complexos como o Firefox
- Ferramentas com funções semelhantes incluem gdb e Valgrind
1 comentários
Comentários do Hacker News