Agenda - Linux debugging

Informações gerais

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

Agenda detalhada

Dia 1 - manhã


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.

Dia 1 - tarde


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.

Dia 2 - manhã


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.

Dia 2 - tarde


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.

Dia 3 - manhã


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.

Dia 3 - tarde


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.