Eu estava procurando o Valgrind para ajudar a melhorar minha codificação / depuração C quando descobri que é apenas para Linux - não tenho outra necessidade ou interesse em mudar meu sistema operacional para Linux, então fiquei pensando se existe um programa igualmente bom para Windows.
210
Respostas:
Mais algumas boas ferramentas comerciais:
fonte
Como jakobengblom2 apontou, o valgrind possui um conjunto de ferramentas. Dependendo de qual você está falando, existem diferentes partes do balcão do Windows. Mencionarei apenas OSS ou ferramentas gratuitas aqui.
1. MemCheck:
Dr. Memory. É uma ferramenta relativamente nova, funciona muito bem no Windows 7. Meu recurso favorito é que agrupa as mesmas pilhas de alocação de vazamentos no relatório.
http://code.google.com/p/drmemory/
Eu também usei o UMDH ( http://support.microsoft.com/kb/268343 ) e o achei silencioso, útil e fácil de configurar. Funciona do Win2000 ao Win7.
O AppVerifier é obrigatório para os desenvolvedores de código nativo do Windows, seu verificador de "memória" faz um trabalho semelhante http://msdn.microsoft.com/en-us/library/dd371695%28v=vs.85%29.aspx
2. Callgrind:
Meu favorito é verysleepy ( http://www.codersnotes.com/sleepy ) É pequeno, mas muito útil e fácil de usar.
Se você precisar de mais recursos, o AMD CodeAnalyst ™ Performance Analyzer é gratuito: http://developer.amd.com/documentation/videos/pages/introductiontoamdcodeanalystperformanceanalyzer.aspx
As ferramentas de análise de desempenho do Windows são gratuitas da Microsoft, não são muito fáceis de usar, mas podem fazer o trabalho se você estiver disposto a gastar seu tempo. http://blogs.microsoft.co.il/blogs/sasha/archive/2008/03/15/xperf-windows-performance-toolkit.aspx Faça o download: http://msdn.microsoft.com/en-us/performance / cc752957
3. Maciço:
Ferramentas gratuitas similares (não exatamente iguais) no Windows são:
VMMap da sysinternals: http://technet.microsoft.com/en-us/sysinternals/dd535533
Comando! heap no windbg: http://hacksoflife.blogspot.com/2009/06/heap-debugging-memoryresource-leak-with.html
4. Cachegrind:
O Windows Performance Tools acima mencionado possui um certo nível de capacidade de criação de perfil de falta de cache L2, mas não tão bom e fácil de usar quanto o Cachegrind.
5. DRD:
Ainda não encontrei nada gratuito e poderoso no Windows, a única ferramenta gratuita para Windows que encontrei um pouco próxima é o verificador de "bloqueio" no AppVerifier: http://msdn.microsoft.com/en-us/library /dd371695%28v=vs.85%29.aspx
fonte
Por que não usar Valgrind + Wine para depurar seu aplicativo do Windows? Veja http://wiki.winehq.org/Wine_and_Valgrind
(O Chromium usa isso para verificar a versão do Windows quanto a erros de memória; consulte build.chromium.org e veja as cachoeiras experimentais ou de memória e procure por vinho.)
Há também o Dr. Memory, consulte dynamorio.org/drmemory.html
fonte
Para o Visual C ++, tente o Visual Leak Detector . Quando o usei, ele detectou um vazamento de memória em uma
new
chamada e retornou a linha real no código-fonte do vazamento. A versão mais recente pode ser encontrada em http://vld.codeplex.com/ .fonte
O ambiente de desenvolvimento para Windows que você está usando pode conter suas próprias ferramentas. O Visual Studio, por exemplo, permite detectar e isolar vazamentos de memória em seus programas
fonte
gostaria de listar alguma ferramenta, a esperança será útil
leia este artigo para mais detalhes
fonte
Experimente o DUMA
fonte
Há parte Pageheap.exe das ferramentas de depuração para Windows. É gratuito e é basicamente um alocador / desalocador de memória personalizado.
Consulte http://support.microsoft.com/kb/286470
fonte
gflags
+gdb
(de mingw) útil no diagnóstico.Em combinação com o Visual Studio, geralmente uso o Visual Leak Detector ou simplesmente _CrtDumpMemoryLeaks (), que é uma chamada api do win32. Ambos não são nada extravagantes, mas eles fazem o trabalho.
fonte
Tive a chance de usar o Compuware DevPartner Studio no passado e isso foi muito bom, mas é muito caro. Uma solução mais barata poderia ser o GlowCode , eu apenas trabalhei com uma versão 5.x e, apesar de alguns problemas ao me conectar a um processo que eu precisava depurar, funcionou muito bem.
fonte
Estou amando o Memory Validator , de uma empresa chamada Software Verification.
fonte
O Viusual Studio pode ajudar a detectar vazamentos de memória. Consulte Dicas e truques do Microsoft Visual C ++ -> seção "Vazamentos de memória". Veja também este post no SO
Embora o rastreamento real só seja possível com a Team Edtion do Visual Studio.
fonte
Consulte o link " Ferramentas de teste de origem " na página Recursos de ferramenta de teste e teste de controle de qualidade de software para obter uma lista de ferramentas semelhantes.
Eu usei BoundsChecker, DevPartner Studio e Intel V-Tune no passado para criação de perfil. Eu gostei do V-Tune o melhor; você poderia emular vários chipsets Intel e forneceria dicas de como otimizar essa plataforma.
fonte
O Detector de Vazamento de Memória de Jochen Kalmbach está qualificado?
PS: O URL da versão mais recente está oculto em algum lugar no tópico de comentários do artigo.
fonte
LeakDiag, UMDH, App Verifier, DebugDiag, são ferramentas úteis para melhorar a robustez do código e encontrar vazamentos de memória.
fonte
A biblioteca Boost Test pode detectar vazamentos de memória.
fonte
E o Purify ?
fonte
Experimente o produto Inspector XE da Intel, que pode ajudá-lo a detectar problemas de memória e de encadeamento: http://software.intel.com/en-us/articles/intel-inspector-xe/
fonte
Talvez o CodeSnitch seja algo que você procura? http://www.entrek.com/codesnitch.html
fonte
Se você estiver desenvolvendo com o Borland / CodeGear / Embarcadero C ++ Builder, poderá usar o CodeGuard.
fonte
Mais ou menos todos os Profilers incluem a verificação de vazamentos de memória e mostram a pilha quando a memória foi alocada.
Posso recomendar o Intels Parallel Inspector . Simples de usar e sem necessidade de recompilação. A versão de teste dura 30 dias.
O GlowCode e o AtromatedQA também incluem esses recursos. Todos eles oferecem testes gratuitos.
O Compuware DevPartner (também conhecido como BoundsChecker) no Contrast precisa de uma recompilação de "instrumentação" mais lenta e o aplicativo também é executado mais lentamente na verificação de erros. E o BoundsChecker não pode funcionar com evsrions de 64 bits. Desistimos dessa ferramenta.
fonte
A melhor ferramenta que já usei é o DevPartner BoundsChecker - não é gratuito, mas possui um período de avaliação.
fonte
Outra ferramenta de memória para sua lista: Memory Validator .
Não é gratuito, mas nem de longe é tão caro quanto o Purify ou o Boundschecker.
fonte
Se você não tem medo do mingw, aqui estão alguns links (alguns podem funcionar com o MSVC) ... http://betterlogic.com/roger/?p=1140
fonte
Acabamos de concluir uma ferramenta de verificação de segurança de memória para Windows, que lida com o GCC e o Micrsoft Visual C (ainda não em C ++), e estamos procurando por testadores beta.
Edição 12 de junho de 2011: Não é mais a versão beta, agora produção para o GCC e o Microsoft Visual Studio C.
fonte
Encontrei este projeto SF hoje:
http://sourceforge.net/p/valgrind4win/wiki/Home/
Eles estão portando o valgrind para o Windows. Provavelmente em vários anos teremos um valgrind confiável no Windows.
fonte
Confira esta pergunta: Existe um bom substituto para o Valgrind para Windows? . Embora seja solicitado um substituto geral para valgrind, ele discute principalmente detectores de vazamento de memória e não detecções de condições de corrida.
fonte
Eu usei o Insure ++, que faz um excelente trabalho em encontrar vazamentos / corrupções de memória em c ++ e muitos outros bugs, como variáveis não inicializadas, erros de ponteiro, seqüências de caracteres, etc. seu código .. Você pode experimentá-lo para a versão de trilha ..
fonte
Você pode querer ler o que a Mozilla está fazendo com relação a vazamentos de memória. Uma ferramenta em sua caixa de ferramentas é o coletor de lixo Hans Boehm usado como detector de vazamento de memória.
fonte
Você pode experimentar o RuntimeChecker ou o IBM Purify .
Uma solução gratuita seria usar o seguinte código no Visual Studio:
Basta escrever isso no topo de todos os seus arquivos cpp. Isso detectará vazamentos de memória do seu aplicativo ao interromper a execução da depuração e os listará na janela de saída. Clicar duas vezes em uma linha de vazamento de memória exibirá a linha onde a memória é alocada e nunca liberada. Isso pode ajudá-lo: http://www.flipcode.com/archives/How_To_Find_Memory_Leaks.shtml
fonte