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.


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:


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


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


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


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


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


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


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.


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.


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



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.



3

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


3

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





2

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


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.


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







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



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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.