Pergunta

Com quais detectores de vazamento de memória as pessoas tiveram uma boa experiência?

Aqui está um resumo das respostas até agora:

Valgrind - Framework de instrumentação para construção de ferramentas de análise dinâmica.

Cerca elétrica - Uma ferramenta que funciona com GDB

Tala - Verificação estática leve assistida por anotação

Código de brilho - Este é um perfilador completo de desempenho e memória em tempo real para programadores Windows e .NET que desenvolvem aplicativos com C++, C# ou qualquer .NET Framework

Veja também isso postagem stackoverflow.

Foi útil?

Solução

segundo o valgrind...e vou adicionar Cerca elétrica.

Outras dicas

Valgrind no Linux é bastante bom;Não tenho experiência no Windows com isso.

Se você tiver dinheiro: IBM Rational Purify é um detector de vazamento de memória e corrupção de memória extremamente poderoso para C/C++.Existe para Windows, Solaris e Linux.Se você usa apenas Linux e deseja uma solução barata, opte pelo Valgrind.

Para-lamas para gcc!Na verdade, ele compila as verificações no executável.Basta adicionar

-fmudflap -lmudflap

para seus sinalizadores gcc.

lint (ferramenta de código aberto muito semelhante chamada tala)

Também vale a pena usar se você estiver no Linux usando glibc, o código heap de depuração integrado.Para usá-lo, link com -lmcheck ou definir (e exportar) o MALLOC_CHECK_ variável de ambiente com o valor 1, 2 ou 3. O manual da glibc fornece mais informações.

Este modo é mais útil para detectar liberações duplas e geralmente encontra gravações fora da área de memória alocada ao fazer uma liberação.Não acho que isso relate vazamento de memória.

Eu tive alguns sucessos com cppcheck, que faz apenas análise estática.É open source e possui interface de linha de comando (não usei de outra forma).

Doloroso, mas se você tivesse que usar um ..
Eu recomendaria o Verificador de limites do DevPartner suíte..é isso que as pessoas no meu local de trabalho usam para esse fim.Pago e proprietário..não é gratuito.

Tenho um amor mínimo por qualquer detector de vazamento de memória.Normalmente, há muitos falsos positivos para que eles tenham alguma utilidade.Eu recomendaria estes dois como sendo os menos intrusivos:

Código Glow

Pilha de depuração

Para depuração de vazamentos de memória no Win32, tive experiências muito boas com o antigo CRT Debug Heap, que vem como uma biblioteca com Visual C.

Em uma compilação de depuração, malloc (et al) é redefinido como _malloc_dbg (et al) e há outras chamadas para recuperar resultados, que são todas indefinidas se _DEBUG não estiver definido.Ele configura todos os tipos de guardas de limite na pilha e permite exibir os resultados a qualquer momento.

Tive alguns falsos positivos quando estava aprendendo algumas rotinas de tempo que atrapalhavam as alocações de tempo de execução da biblioteca até descobrir _CRT_BLOCK.

Tive que produzir primeiro o DOS, depois o console Win32 e serviços que funcionariam para sempre.Até onde eu sei, não há vazamentos de memória e, em pelo menos um lugar, o código foi executado por dois anos sem supervisão antes que o monitor do PC falhasse (embora o PC estivesse bem!).

No Windows, usei Detector visual de vazamento.Integra-se com VC++, fácil de usar (basta incluir um cabeçalho e definir LIB para encontrar a lib), código aberto, FTW de uso gratuito.

Na universidade, quando eu fazia a maioria das coisas no Unix Solaris, eu usava gdb.

No entanto, eu iria com valgrind no Linux.

O avô dessas ferramentas é o comercial, de código fechado Purificar ferramenta, que foi vendida para a IBM e depois para a UNICOM

Parasoft Seguro++ (instrumentação de código-fonte) e valgrind (código aberto) são os outros dois concorrentes reais.

Curiosidades:o autor original de Purify, Reed Hastings, fundou o NetFlix.

Ninguém mencionou MSan do clang, que é bastante poderoso.No entanto, é oficialmente compatível apenas com Linux.

Esta pergunta pode ser antiga, mas responderei de qualquer maneira - talvez minha resposta ajude alguém a encontrar vazamentos de memória.

Este é meu próprio projeto - coloquei-o como código-fonte aberto:

https://sourceforge.net/projects/diagnostic/

Plataformas Windows de 32 e 64 bits são suportadas, pilhas de chamadas de modo nativo e misto são suportadas.

A coleta de lixo do .NET não é suportada.(gcnew do C++ cli ou novo do C#)

É uma ferramenta de alto desempenho e não requer nenhuma integração (a menos que você realmente queira integrá-la).

O manual completo pode ser encontrado aqui:

http://diagnostic.sourceforge.net/index.html

Não tenha medo do quanto ele realmente detecta vazamentos em seu processo.Ele detecta vazamentos de memória em todo o processo.Analise apenas os maiores vazamentos, não todos.

Vou apoiar o valgrind como uma ferramenta externa para vazamentos de memória.
Mas, para a maioria dos problemas que tive que resolver, sempre usei ferramentas construídas internamente.Às vezes, as ferramentas externas têm muita sobrecarga ou são muito complicadas de configurar.

Por que usar código já escrito quando você pode escrever o seu próprio :)

Eu brinco, mas às vezes você precisa de algo simples e é mais rápido escrever você mesmo.Normalmente, apenas substituo as chamadas para Malloc () e Free () por funções que mantêm melhor o controle de quem aloca o quê.A maioria dos meus problemas parece ser alguém que se esqueceu de liberar e isso ajuda a resolver esse problema.

Realmente depende de onde está o vazamento e, se você soubesse disso, não precisaria de nenhuma ferramenta.Mas se você tiver alguma ideia de onde acha que está vazando, coloque sua própria instrumentação e veja se isso ajuda.

Nosso CheckPointer A ferramenta pode fazer isso para GNU C 3/4 e dialetos MS de C e GreenHills C.Ele pode encontrar problemas de gerenciamento de memória que o Valgrind não consegue.

Se o seu código simplesmente vazar, ao sair, o CheckPointer informará onde toda a memória não liberada foi alocada.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top