Ferramentas de Depuração
Combine dbg!, tracing, depuradores (lldb/gdb), rust-analyzer e cargo expand para problemas em tempo de compilação e em tempo de execução.
Receita
use tracing::{info, instrument};
#[instrument]
async fn handle(id: u64) -> Result<(), Error> {
info!(%id, "start");
dbg!(&config);
Ok(())
}RUST_LOG=debug cargo run
rust-lldb target/debug/myappExemplo de Trabalho
| Ferramenta | Uso |
|---|---|
dbg! | impressão rápida no stderr do valor+localização |
tracing | logs estruturados e spans em async |
rust-lldb / rust-gdb | breakpoints, backtrace |
rust-analyzer | tipos, erros de borrow inline |
cargo expand | depuração de macros |
samply / perf | perfis de CPU |
# backtrace em caso de panic
RUST_BACKTRACE=1 cargo runAnálise Profunda
Habilite debug = 1 no perfil de release para perfis de produção com símbolos. tracing-subscriber com EnvFilter. tokio-console para introspecção de tarefas async.
Armadilhas
- println em loop quente - Ruído de I/O. Correção: tracing com filtro de nível.
- Debug de release sem símbolos - traces de produção inúteis. Correção: dividir debuginfo.
- Breakpoint em código otimizado - linhas puladas. Correção: build de depuração ou otimização limitada.
- Log de segredos - PII em spans. Correção: redigir campos.
- dbg em código commitado - remover antes de merge ou usar
grepno CI.
Alternativas
| Alternativa | Usar Quando | Não Usar Quando |
|---|---|---|
eprintln! | scripts pequenos | serviços de produção |
crate log | legado | projetos novos usam tracing |
| depuração printf | rápido | serviços em equipe |
FAQs
lldb vs gdb?
lldb é comum no macOS; linux aceita ambos; use o wrapper rust-lldb.
debug no vscode?
Extensão CodeLLDB com launch.json cargo build.
backtrace formatado?
color-eyre em binários para relatórios de panic legíveis.
debug de heap?
dhat/heaptrack separados do lldb.
debug remoto?
gdbserver em container; conectar do host.
wasm?
ferramentas de desenvolvedor do navegador, não lldb.
camadas de tracing?
camadas de subscriber fmt, json, opentelemetry se empilham.
debug de testes?
cargo test -- --nocapture mais lldb no binário de teste.
miri vs lldb?
Miri para UB; lldb para estado em tempo de execução.
sanitizar logs?
Filtrar crates sqlx=warn etc.
Relacionados
Versões de Stack: Esta página foi escrita para Rust 1.97.0 (edição 2024), Tokio 1.x, Axum 0.8, serde 1.0, sqlx 0.8, clap 4, e Polars 0.46+.