Existe um bom substituto para o Valgrind para Windows?

210

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.

Drake
fonte
Que tipos de depuração você está procurando fazer? O Valgrind é um conjunto de ferramentas bastante rico, e as respostas abaixo apontam para todos os tipos de direções. Com ênfase na depuração de vazamento / alocação de memória.
jakobengblom2
1
Talvez você possa testar o código em uma máquina virtual Linux dentro do Windows, exatamente quando precisar verificar. você pode compartilhar a pasta de desenvolvimento entre a máquina virtual e não virtual. isto é, se o código for portátil o suficiente.
Liran Orevi

Respostas:

29

Mais algumas boas ferramentas comerciais:

orip
fonte
1
Purificar: venerável, mas ainda útil, como mostra quantas mudanças de propriedade corporativa sobreviveram!
Norman Ramsey
2
O Segure ++ leva uma eternidade para instrumentar seu código e para sempre executar seu código em tempo de execução.
C Johnson
117

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

Lailin Chen
fonte
2
Também há gperftools (anteriormente Google PerfTools) . Não é uma substituição valgrind (o que é realmente), mas possui um novo malloc, profp cpu, heap profiler e verificador. Vale a pena dar uma olhada, pois é compatível com Linux e Windows (incluindo Mingw) e outros departamentos.
22912 alexr
30

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

Dan Kegel
fonte
3
Porque então você não estaria depurando um aplicativo Windows - estaria depurando um aplicativo Linux.
John Dibling
33
Não há necessidade de recompilar no Wine. Basta transferir seu arquivo .exe e .pdb para uma caixa do Linux. E você não estaria depurando um aplicativo Linux; você está depurando seu aplicativo exato do Windows.
Dan Kegel
2
Exatamente, é melhor usar a coisa real do que um clone manco: D Love valgrind.
alternativa
11
Agradável! No Windows, você pode executar uma máquina virtual executando o linux, executando o software no quase vm wine, no valgrind vm. Os pontos de bónus Se o Windows é executado a partir de um Linux rodando vm dentro de uma máquina virtual do Windows :)
Imbrondir
15

Para o Visual C ++, tente o Visual Leak Detector . Quando o usei, ele detectou um vazamento de memória em uma newchamada e retornou a linha real no código-fonte do vazamento. A versão mais recente pode ser encontrada em http://vld.codeplex.com/ .

tgs_stdio
fonte
Não parece funcionar para mim. Eu até tentei criar um projeto simples que basicamente não fazia nada além de alocar alguma memória e não liberá-la. O VLD não o detectou. : - |
Synetech
@Synetech inc. Eu tive o mesmo problema no VS2010 ... Usando a versão mais recente do VLD resolveu o meu problema
relaxxx
14

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

dmityugov
fonte
6
É de muito pouca utilidade prática. Ele registrará o nome do arquivo / número da roupa para alocações ofensivas, mas só será informativo se você ligar diretamente para o malloc. Ao usar novo / excluir, ele identificará new.h sem ajuda como o código "ofensivo".
user9665
3
Funciona corretamente para mim, apontando a linha direita, mesmo que novas / excluídas sejam usadas.
Rodrigo
Mas funcionará se uma função de biblioteca for alocada? Por exemplo, strdup.
1811 Alex Budovski
1
O Valdrind faz muito mais do que encontrar vazamentos de memória; eu principalmente o uso para encontrar o uso de pilha e memória de pilha liberadas e não inicializadas, que podem ser incrivelmente difíceis de depurar caso contrário.
usar o seguinte código
1
@ user9665 O Detector de vazamento visual ( vld.codeplex.com ) fornece uma pilha de chamadas completa para cada vazamento de memória com alterações mínimas no código de fonte. Veja o exemplo no site
KindDragon 19/04/12
14

gostaria de listar alguma ferramenta, a esperança será útil

leia este artigo para mais detalhes

  1. Purificar
  2. Verificador de limites
  3. Cobertura (basicamente é um analisador de código, mas ele capta vazamentos de memória em estática)
  4. Código de brilho
  5. dmalloc
  6. ccmalloc
  7. NJAMD
  8. YAMD
  9. Valgrind
  10. mpatrol
  11. Segurar ++
Satbir
fonte
12

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
Pageheap / gflags me ajudaram a entender alguns problemas desagradáveis ​​de corrupção de heap.
the_mandrill
Eu achei gflags+ gdb(de mingw) útil no diagnóstico.
21712 Jarekczek
8

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.

Jasper Bekkers
fonte
6

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.

Manuel
fonte
Caro sim. Foi pago em um fim de semana, apenas usando a parte do profiler.
EvilTeach
5

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.

fmuecke
fonte
4

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.

Patrick Cuff
fonte
3

LeakDiag, UMDH, App Verifier, DebugDiag, são ferramentas úteis para melhorar a robustez do código e encontrar vazamentos de memória.

Alex Budovski
fonte
3

A biblioteca Boost Test pode detectar vazamentos de memória.

zr.
fonte
3

E o Purify ?

grigy
fonte
Não é realmente gratuito ... mas acho que você pode encontrar uma licença de teste para fins de teste.
David Rodríguez - dribeas 1/10/09
Link inoperante a partir de 04/02/2011 para BoundsChecker.
d11
2

Se você estiver desenvolvendo com o Borland / CodeGear / Embarcadero C ++ Builder, poderá usar o CodeGuard.

Vince
fonte
2

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.

RED SOFT ADAIR
fonte
2
Eu recomendaria definitivamente o glowcode. Eu usei no passado para encontrar um vazamento de memória dentro de uma dll sendo chamada pelo meu aplicativo.
Bob
Houve queixas de grandes desacelerações ao usar o DevPartner no meu último local de trabalho. Eles fazem de tudo para evitar usá-lo por causa do quão lento seria.
Calyth
2

A melhor ferramenta que já usei é o DevPartner BoundsChecker - não é gratuito, mas possui um período de avaliação.

Dror Helper
fonte
2

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.

Stephen Kellett
fonte
2

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.

Ira Baxter
fonte
1

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 ..

Vermelho
fonte
1

Você pode experimentar o RuntimeChecker ou o IBM Purify .

Uma solução gratuita seria usar o seguinte código no Visual Studio:

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

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

Patrice Bernassola
fonte