Artigo :: Debugando com strace

Introdução

Ao final deste artigo, você entenderá como usar o strace para depurar programas sem acesso ao código-fonte, rastrear chamadas de sistema e solucionar problemas de execução no Linux.

Visão Geral

Depurar sem código-fonte pode parecer resolver um quebra-cabeça no escuro. O strace ilumina o caminho mostrando exatamente quais chamadas de sistema um programa faz, desde abertura de arquivos até conexões de rede. Se você está solucionando um crash, investigando comportamento suspeito, ou apenas curioso sobre como um programa funciona por baixo dos panos, o strace é uma ferramenta essencial no seu kit Linux.

O strace monitora as chamadas de sistema e sinais de um programa específico, fornecendo a sequência de execução do início ao fim. É particularmente valioso quando você não tem acesso ao código-fonte e precisa entender o que um programa está realmente fazendo no nível do sistema.

Pré-requisitos

Antes de começar, você deve ter:

O que é strace?

Strace é uma ferramenta de diagnóstico e depuração que intercepta e registra chamadas de sistema feitas por um processo. É particularmente útil quando:

Rastreando uma Execução

A maneira mais simples de usar o strace é executá-lo com um programa:

1
strace Binary_File

Isso exibe toda chamada de sistema feita pelo programa no stderr, o que pode ser muito para programas complexos.

Opções úteis:

Filtrando Chamadas de Sistema

O verdadeiro poder do strace vem da filtragem. Use a opção -e para focar em chamadas de sistema específicas:

1
strace -e socket,send,recv nc google.com 80

Isso mostra apenas chamadas relacionadas à rede, filtrando centenas de chamadas de sistema irrelevantes.

Categorias comuns de filtro:

Anexando a Processos em Execução

Você pode anexar o strace a um processo já em execução usando seu PID:

1
strace -p PID

Isso é inestimável para depurar sistemas ao vivo sem reiniciar serviços.

Exemplo: Depurar um servidor web travado:

1
2
3
4
5
# Encontre o PID
ps aux | grep nginx

# Anexe o strace (pode requerer sudo)
sudo strace -p 1234

Analisando Estatísticas do Programa

A flag -c fornece um relatório resumido em vez de saída detalhada, mostrando:

1
strace -c binary_file argumentos

Isso é perfeito para análise de performance e identificação de gargalos.

Exemplo de saída:

% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
 45.12    0.012345          23       537           read
 32.45    0.008876          45       197           write
 12.34    0.003376         112        30           open

Pontos-Chave

Exercícios Práticos

  1. Execute strace ls /tmp e identifique as chamadas de sistema usadas para ler o diretório
  2. Use strace -e open cat /etc/passwd para ver quais arquivos o cat abre antes de ler seu arquivo alvo
  3. Crie um script Python simples e use strace -c para analisar quais chamadas de sistema dominam
  4. Anexe o strace a um processo de longa duração (como um editor de texto) e observe suas chamadas de sistema durante tempo ocioso

Leitura Adicional