Tópicos principais | Introdução à depuração de software, principais ferramentas e técnicas de depuração em sistemas Linux, introdução à depuração de aplicações com o GDB, depuração do kernel através da análise de mensagens de logs e crashes (oops e panic), ferramentas e técnicas de rastreamento (tracing) do kernel Linux, depuração interativa do kernel Linux com o GDB, detecção de vazamento de memória (memory leak) no kernel Linux, detecção de travamentos no kernel, análise de crashes e core dump em aplicações e bibliotecas Linux, ferramentas de rastreamento de código (tracing) em aplicações Linux, depuração interativa de aplicações Linux com o GDB, análise de aplicações multithread com o GDB, depuração de vazamentos de memória (memory leak) em aplicações Linux, análise de performance em sistemas Linux |
Duração | 3 dias - 24 horas - 40% de teoria e 60% de prática |
Instrutor | Sergio Prado |
Público-alvo | Estudantes, engenheiros, desenvolvedores e líderes de equipes de desenvolvimento de software para sistemas embarcados |
Pré-requisitos | Terminal de comandos (ls, cp, mv, cat, grep, find, vi, etc), conhecimentos intermediários nas linguagens C e C++, compilação de aplicações com make e gcc, arquitetura e componentes de um sistema com Linux embarcado (toolchain, bootloader, kernel, rootfs), configuração e compilação do kernel Linux |
Material de estudo | O material de estudo é composto pelos slides, o livro de atividades e exercícios, os guias de referência e documentos de estudo adicional. Todo o material é fornecido de forma eletrônica no início do treinamento |
Kit de desenvolvimento | Os kits de desenvolvimento são emprestados aos alunos durante o treinamento para a execução das atividades práticas. É utilizado por padrão o módulo Colibri i.MX6 (ARM Cortex-A9) da Toradex. Se necessário, e conforme a necessidade da empresa contratante, o treinamento pode ser portado para uma outra plataforma de hardware |
Apresentação: Introdução à depuração de software - Introdução à depuração de software, o processo de depuração de software, principais tipos de problemas, principais mecanismos de depuração, processos e técnicas de depuração e análise de performance em sistemas Linux.
Laboratório: Preparação do ambiente de laboratório - Neste exercício iremos preparar o ambiente de laboratório do treinamento, compilar o kernel e o rootfs e testar o boot do sistema no target.
Apresentação: Introdução ao GDB - Introdução ao GDB, depurando aplicações com o GDB, comandos básicos do GDB, controle de execução, breakpoints, watchpoints, catchpoints, imprimindo expressões, exibindo memória, backtrace do stack, modo TUI, integração com DDD e Eclipse.
Laboratório: Depuração com o GDB - Neste exercício estudaremos a interface de linha de comandos do GDB e iremos depurar algumas aplicações desenvolvidas em linguagem C.
Apresentação: Depuração do kernel Linux - Coletando informações de sistemas de arquivos virtuais do kernel (procfs, sysfs, debugfs), depurando o kernel Linux com ferramentas e técnicas de logging (printk, dynamic debug), , análise de mensagens de crash do kernel (oops e panic) com as ferramentas addr2line e GDB, depurando módulos do kernel, pstore, kdump.
Laboratório: Análise de logs e crashes do kernel - Neste exercício aprenderemos a utilizar algumas das principais ferramentas e técnicas de análise de mensagens de erro e crashes do kernel Linux.
Apresentação: Mecanismos de tracing do kernel Linux - Tracing estático e tracing dinâmico, ferramentas e técnicas de tracing (ftrace, trace-cmd, kernelshark, systemtap), introdução ao ftrace, tracing de funções, tempos de latência e consumo de stack, introdução ao trace-cmd, visualização gráfica do tracing com a ferramenta kernelshark.
Laboratório: Ferramentas de tracing do kernel Linux - Neste exercício aprenderemos a utilizar algumas ferramentas de tracing do kernel Linux.
Apresentação: Depuração interativa do kernel Linux - Depuração interativa do kernel Linux com o GDB (kgdb, gdbclient e agent-proxy), GDB e otimização de código, front-end de depuração KDB, depuração no nível do hardware com JTAG.
Laboratório: Depuração interativa do kernel com o GDB - Neste exercício estudaremos o processo de depuração do kernel Linux com o GDB.
Apresentação: Frameworks de depuração do kernel Linux - Frameworks de depuração do kernel Linux, menu de configuração “Kernel Hacking”, detecção de vazamento de memória no kernel, kmemleak, magic sysrq key, detecção de travamentos no kernel.
Laboratório: Problemas de memória e travamento no kernel - Neste exercício estudaremos os frameworks de verificação de alocação de memória e identificação de travamentos do kernel Linux.
Apresentação: Depuração de aplicações Linux - Ferramentas e técnicas de logging na camada de usuário, análise de crashes e core dump em aplicações e bibliotecas Linux, GDB e bibliotecas dinâmicas.
Laboratório: Análise de crashes na camada nativa - Neste exercício analisaremos problemas de crash em aplicações de sistemas Linux.
Apresentação: Tracing em aplicações Linux - Ferramentas de tracing de aplicações em espaço de usuário, strace, ltrace, etrace, uprobe, perf, systemtap, lttng-ust.
Laboratório: Ferramentas de tracing de aplicações Linux - Neste exercício estudaremos como analisar o funcionamento de aplicações de sistemas Linux utilizando mecanismos de tracing.
Apresentação: Depuração interativa de aplicações - Depuração remota de aplicações Linux com o gdbserver, GDB e bibliotecas dinâmicas, GDB e otimização de código, depuração de aplicações multithread com o GDB.
Laboratório: Depuração interativa de aplicações com o GDB - Neste exercício estudaremos o processo de depuração de aplicações Linux com o GDB.
Apresentação: Depuração do uso de memória de aplicações - Depurando o uso de memória em aplicações Linux, ferramentas de análise do uso de memória (free, procrank, pmap), depurando e identificando vazamentos de memória com valgrind, mtrace, memwatch e dmalloc.
Laboratório: Depuração de problemas de memória em aplicações - Neste exercício iremos analisar o uso de memória em aplicações de sistemas Linux.
Apresentação: Análise de performance de sistemas Linux - Análise de performance em sistemas Linux, análise de consumo de CPU (uptime, cpuload, top, schedtop, time), análise de consumo de memória (free, procrank, pmap), análise de performance com o perf, a ferramenta oprofile, analisando a performance de aplicações com o strace e o ltrace, analisando a performance de aplicações com o gprof.
Laboratório: Análise de problemas de performance - Neste exercício estudaremos algumas técnicas e ferramentas de análise de performance em sistemas Linux.
Apresentação: Considerações finais - Links e recursos adicionais, recomendações de livros, dúvidas e comentários finais, encerramento.