Introdução ao Valgrind
"Valgrind" é uma estrutura de
instrumentação para construir ferramentas dinâmicas de análise.
Existem ferramentas "Valgrind" que conseguem detectar
automaticamente muitos defeitos de gerenciamento de memória e de
camadas e perfilar aplicativos em detalhes. "Valgrind" também pode
ser usado para construir novas ferramentas.
Nota
Esse pacote é conhecido por construir e
funcionar adequadamente usando-se uma plataforma LFS 13.0.
Informação do Pacote
-
Transferência (HTTP):
https://sourceware.org/pub/valgrind/valgrind-3.26.0.tar.bz2
-
Transferência (FTP):
-
Soma de verificação MD5 da transferência:
856da1bc568212df6df502295a0439c0
-
Tamanho da transferência: 16 MB
-
Espaço em disco estimado exigido: 414 MB (adicionar 86 MB
para os testes)
-
Tempo de construção estimado: 0,5 UPC (adicionar 6,4 UPC para
testes; ambos usando paralelismo=4)
Transferências Adicionais
Dependências do "Valgrind"
Opcionais
docbook-xml-4.5 (para testes), GDB-17.1 (para testes),
libaio-0.3.113, LLVM-21.1.8 (com Clang) e
Which-2.23 (para testes)
Instalação do Valgrind
Primeiro, faça várias mudanças que são exigidas para Valgrind
funcionar em sistemas com glibc-2.43 e Linux 6.18.x instalados:
patch -Np1 -i ../valgrind-3.26.0-upstream_fixes-1.patch
Em seguida, gere novamente o sistema de construção já que nós
ajustamos os Makefiles:
autoreconf -fiv
Instale "Valgrind" executando os
seguintes comandos:
sed -i 's|/doc/valgrind||' docs/Makefile.in &&
./configure --prefix=/usr \
--datadir=/usr/share/doc/valgrind-3.26.0 &&
make
Para testar os resultados, emita: "make regtest". Os testes
possivelmente travem para sempre se "GDB-17.1" não estiver instalado.
Alguns testes também são conhecidos por travarem, dependendo da
versão da "glibc". Alguns testes podem falhar em várias suítes.
Testes problemáticos podem ser desabilitados mudando-se a linha
"prereq:" no
arquivo ".vgtest" correspondente para
"prereq: false".
Por exemplo:
sed -e 's@prereq:.*@prereq: false@' \
-i {helgrind,drd}/tests/pth_cond_destroy_busy.vgtest
Uma suíte de teste adicional agora está disponível que testa o
Valgrind com cada chamada de sistema fornecida pelo núcleo. A suíte
de teste foi projetada para testar não somente a glibc e a
conformidade do núcleo com os padrões, mas também a capacidade do
Valgrind de manusear diferentes chamadas de sistema. A suíte de
teste exige uma conexão com a internet para baixar os testes e leva
muito tempo para executar (20 UPCs adicionais e 1,3 GB de espaço em
disco). Se você desejar executar essa suíte de teste, emita o
seguinte comando: make
ltpchecks. Observe que a saída gerada mostrará
várias falhas onde o Valgrind atualmente não suportar determinadas
chamadas de sistema, mas os registros para a suíte de teste podem
ser encontrados no diretório auxprogs/auxchecks/ltp-full-20250930/ltp/tests.
Esses testes atualmente estão quebrados com Linux 6.18 e
glibc-2.43.
Nota
Os testes "OpenMP" serão pulados
se a "libgomp" tiver sido compilada com "--enable-linux-futex" (o padrão). Se necessário,
apenas recompile a biblioteca "libgomp" originária da árvore de
construção do "gcc", passando "--disable-linux-futex" para configurar,
armazenando a biblioteca em algum lugar e mudando o link de
"/usr/lib/libgomp.so.1" para
apontar para a nova biblioteca.
Agora, como o(a) usuário(a) "root":
make install
Explicações do Comando
sed -i ...
docs/Makefile.in : Esse "sed" fornece a instalação
da documentação em um diretório versionado.
--enable-lto=yes: Essa opção permite
construir "Valgrind" com "Link Time Optimization" ("LTO"). Isso
produz um "Valgrind" menor/mais rápido (até 10%), mas o tempo de
construção aumenta para cerca de 5,5 UPC.