Como verificar vazamentos de memória nos módulos de extensão do Guile?
-
09-06-2019 - |
Pergunta
Desenvolvo um módulo de extensão para Guile, escrito em C.Este módulo de extensão incorpora um interpretador Python.
Como este módulo de extensão invoca o interpretador Python, preciso verificar se ele gerencia adequadamente a memória ocupada pelos objetos Python.
Descobri que o interpretador Python se comporta bem em seu próprio manuseio de memória, de modo que, ao executar o valgrind, posso encontrar vazamentos de memória devido a bugs no código de incorporação do meu próprio interpretador Python, se não houver outros fatores de interferência.
No entanto, quando executo o Guile no valgrind, o valgrind relata vazamentos de memória.Esses vazamentos de memória obscurecem qualquer vazamento de memória devido ao meu próprio código.
A questão é o que posso fazer para separar vazamentos de memória devido a bugs em meu código dos vazamentos de memória relatados por valgrind como sendo causados por Guile.Outra ferramenta em vez do valgrind?Opções especiais de valgrind?Desistir e confiar no passo a passo manual do código?
Solução
Você tem algumas opções.Uma é escrever um arquivo de supressão para o valgrind que desative o relatório de coisas nas quais você não está trabalhando.Python possui esse arquivo, por exemplo:http://svn.python.org/projects/python/trunk/Misc/valgrind-python.supp
Se valgrind não gostar da sua configuração, outra possibilidade é usar libmudflap
;você compila seu programa com gcc -fmudflap -lmudflap
, e o código resultante é instrumentado para depuração de ponteiro.Descrito nos documentos do gcc e aqui: http://gcc.gnu.org/wiki/Mudflap_Pointer_Debugging