Esiste un buon sostituto Valgrind per Windows?


210

Stavo cercando Valgrind per migliorare il mio codice / debugging in C quando ho scoperto che è solo per Linux - non ho altri bisogni o interessi nel spostare il mio sistema operativo su Linux, quindi mi chiedevo se esiste un programma altrettanto valido per Windows.


Che tipo di debug stai cercando di fare? Valgrind è un set di strumenti piuttosto ricco, e le risposte che seguono indicano tutti i tipi di direzioni. Con un'enfasi sul debug della perdita di memoria / allocazione.
jakobengblom2,

1
Forse puoi testare il codice su una macchina Linux virtuale all'interno di Windows, proprio quando devi controllarlo. puoi condividere la cartella di sviluppo tra la macchina virtuale e non virtuale. cioè se il codice è abbastanza portatile.
Liran Orevi,

Risposte:


29

Alcuni altri buoni strumenti commerciali:


1
Purify: venerabile ma comunque utile, come dimostrato da quanti cambiamenti di proprietà aziendale è sopravvissuto!
Norman Ramsey,

2
Assicurare ++ richiede un'eternità per strumentare il tuo codice e per sempre per eseguire il tuo codice in fase di esecuzione.
C Johnson,

117

Come ha sottolineato jakobengblom2, valgrind ha una serie di strumenti. A seconda di quale stai parlando ci sono diverse parti di controparte di Windows. Citerò solo OSS o strumenti gratuiti qui.

1. MemCheck:

Dr. Memory. È uno strumento relativamente nuovo, funziona molto bene su Windows 7. La mia caratteristica preferita è che raggruppa le pile di allocazione delle stesse perdite nel rapporto.

http://code.google.com/p/drmemory/

Ho anche usato UMDH ( http://support.microsoft.com/kb/268343 ) e l'ho trovato abbastanza utile e facile da installare. Funziona da Win2000 a Win7.

AppVerifier è un must per gli sviluppatori di codice nativo di windows per windows, il suo correttore di "memoria" fa un lavoro simile http://msdn.microsoft.com/en-us/library/dd371695%28v=vs.85%29.aspx

2. Callgrind:

Il mio preferito è verysleepy ( http://www.codersnotes.com/sleepy ) È piccolo ma molto utile e facile da usare.

Se hai bisogno di più funzionalità, AMD CodeAnalyst ™ Performance Analyzer è gratuito: http://developer.amd.com/documentation/videos/pages/introductiontoamdcodeanalystperformanceanalyzer.aspx

Gli strumenti di analisi delle prestazioni di Windows sono gratuiti da Microsoft, non molto facili da usare ma possono svolgere il lavoro se si è disposti a passare il tempo. http://blogs.microsoft.co.il/blogs/sasha/archive/2008/03/15/xperf-windows-performance-toolkit.aspx Scarica: http://msdn.microsoft.com/en-us/performance / cc752957

3. Massiccio:

Strumenti gratuiti simili (corrispondenza non del tutto esatta) su Windows sono:

VMMap da sysinternals: http://technet.microsoft.com/en-us/sysinternals/dd535533

! comando heap in windbg: http://hacksoflife.blogspot.com/2009/06/heap-debugging-memoryresource-leak-with.html

4. Cachegrind:

Gli strumenti per le prestazioni di Windows di cui sopra hanno un certo livello di capacità di profiling della cache L2 ma non altrettanto buono e facile da usare come Cachegrind.

5. DRD:

Non ho ancora trovato nulla di gratuito e potente su Windows, l'unico strumento gratuito per Windows che trovo leggermente vicino è il controllo "blocco" in AppVerifier: http://msdn.microsoft.com/en-us/library /dd371695%28v=vs.85%29.aspx


2
C'è anche gperftools (precedentemente Google PerfTools) . Non è un sostituto valgrind (ciò che è realmente) ma ha un nuovo malloc, profiler cpu, profiler heap e checker. Vale la pena dare un'occhiata in quanto è il supporto su Linux e Windows (inc Mingw) e altri unices.
alex

30

Perché non usare Valgrind + Wine per eseguire il debug dell'app di Windows? Vedi http://wiki.winehq.org/Wine_and_Valgrind

(Chromium lo usa per controllare la versione di Windows per errori di memoria; vedi build.chromium.org e guarda le cascate sperimentali o di memoria e cerca vino.)

C'è anche il Dr. Memory, vedi dynamorio.org/drmemory.html


3
Perché allora non eseguiresti il ​​debug di un'app di Windows: eseguiresti il ​​debug di un'app di Linux.
John Dibling,

33
Non è necessario ricompilare in Wine. Basta trasferire i file .exe e .pdb su un box Linux. E non eseguiresti il ​​debug di un'app Linux; stai eseguendo il debug della tua app Windows esatta.
Dan Kegel,

2
Esatto, è meglio usare la cosa reale di un clone zoppo: D Love valgrind.
alternativa il

11
Bello! Da Windows è possibile eseguire una macchina virtuale che esegue Linux, eseguendo il software in quasi vm wine, in valgrind vm. Punti bonus se windows viene eseguito da un VM che esegue Linux all'interno di un Windows VM :)
Imbrondir,

15

Per Visual C ++, prova Visual Leak Detector . Quando l'ho usato, ha rilevato una perdita di memoria da una newchiamata e ha restituito la linea effettiva nel codice sorgente della perdita. L'ultima versione è disponibile all'indirizzo http://vld.codeplex.com/ .


Non sembra funzionare per me. Ho anche provato a creare un semplice progetto che sostanzialmente non faceva altro che allocare un po 'di memoria e non liberarlo. VLD non l'ha rilevato. : - |
Synetech,

@Synetech inc. Ho avuto lo stesso problema in VS2010 ... L'uso della versione più recente di VLD ha risolto il mio problema
relaxxx

14

L'ambiente di sviluppo per Windows in uso può contenere strumenti propri. Visual Studio, ad esempio, ti consente di rilevare e isolare perdite di memoria nei tuoi programmi


6
È di scarsa utilità pratica. Registrerà il nome file / lino per le allocazioni offensive, ma è informativo solo se si chiama direttamente malloc. Quando si utilizza new / delete, individuerà inutilmente new.h come codice "offensivo".
user9665

3
Funziona correttamente per me, indicando la linea giusta vengono utilizzati anche new / delete.
Rodrigo,

Funzionerà se viene allocata una funzione di libreria? Ad esempio strdup.
Alex Budovski,

1
Valdrind fa molto di più quindi trova perdite di memoria, la uso principalmente per trovare memoria di stack e heap liberata e non inizializzata che altrimenti può essere incredibilmente difficile da eseguire il debug.
ideasman42

1
@ user9665 Visual Leak Detector ( vld.codeplex.com ) fornisce un callstack completo per ogni perdita di memoria con modifiche minime al codice souce. Controlla l'esempio sul sito
KindDragon,

14

Vorrei elencare alcuni strumenti, la speranza sarà utile

leggi questo articolo per maggiori dettagli

  1. Purificare
  2. Controllo dei limiti
  3. Coverity (fondamentalmente si tratta di un analizzatore di codice ma catturerà la perdita di memoria in modalità statica)
  4. Codice bagliore
  5. dmalloc
  6. ccmalloc
  7. NJAMD
  8. YAMD
  9. Valgrind
  10. mpatrol
  11. assicurare ++


12

Pageheap.exe è parte degli strumenti di debug per Windows. È gratuito ed è fondamentalmente un allocatore / deallocatore di memoria personalizzato.

Vedi http://support.microsoft.com/kb/286470


Pageheap / gflags mi hanno aiutato ad arrivare al fondo di alcuni brutti problemi di corruzione dell'heap.
the_mandrill,

Ho trovato gflags+ gdb(da mingw) utile nella diagnosi.
Jarekczek,

8

In combinazione con Visual Studio utilizzo generalmente Visual Leak Detector o semplicemente _CrtDumpMemoryLeaks () che è una chiamata api win32. Entrambi non sono niente di speciale ma fanno il loro lavoro.


6

Ho avuto la possibilità di utilizzare Compuware DevPartner Studio in passato ed è stato davvero buono, ma è piuttosto costoso. Una soluzione più economica potrebbe essere GlowCode , ho appena lavorato con una versione 5.x e, nonostante alcuni problemi di collegamento a un processo che avevo bisogno di eseguire il debug, ha funzionato abbastanza bene.


Sì costoso. È stato ripagato in un fine settimana, usando solo il pezzo del profiler.
EvilTeach



4

Vedere il link " Strumenti di test di origine " nella pagina Risorse per gli strumenti di test e test QA del software per un elenco di strumenti simili.

In passato ho usato BoundsChecker, DevPartner Studio e Intel V-Tune per la profilazione. V-Tune mi è piaciuto di più; potresti emulare vari chipset Intel e ti darebbe suggerimenti su come ottimizzare per quella piattaforma.



3

LeakDiag, UMDH, App Verifier, DebugDiag, sono tutti strumenti utili per migliorare la robustezza del codice e trovare perdite di memoria.


3

La libreria Boost Test è in grado di rilevare perdite di memoria.





2

Se stai sviluppando con Borland / CodeGear / Embarcadero C ++ Builder, puoi usare CodeGuard.


2

Più o meno tutti i Profiler includono il controllo delle perdite di memoria e mostrano lo stack al momento dell'allocazione della memoria.

Posso consigliare Intels Parallel Inspector . Semplice da usare e nessuna ricompilazione necessaria. La versione di prova dura 30 giorni.

GlowCode e AtromatedQA includono anche tali capacità. Tutti offrono prove gratuite.

Compuware DevPartner (alias BoundsChecker) in Contrast ha bisogno di una ricompilazione "strumentazione" rallentata e l'applicazione funziona anche più lentamente quando si verificano errori. E BoundsChecker non può assolutamente funzionare con versioni a 64 bit. Abbiamo rinunciato a quello strumento.


2
Consiglierei vivamente il glowcode. L'ho usato in passato per trovare una perdita di memoria all'interno di una DLL chiamata dalla mia app.
Bob,

Ci sono state lamentele di importanti rallentamenti durante l'utilizzo di DevPartner nel mio ultimo posto di lavoro. Fanno di tutto per evitare di usarlo a causa di quanto lento sarebbe.
Calyth,







1

Ho usato Insure ++ che fa un ottimo lavoro nella ricerca di perdite / corruzioni della memoria c ++ e molti altri bug come variabili non inizializzate, errori del puntatore, stringhe ecc., Fa anche "copertura del codice" visivo e utilizzo della memoria del tempo di esecuzione ecc. Che danno più sicurezza su il tuo codice .. Puoi provarlo per la versione trail ..



1

Puoi provare la versione di prova di RuntimeChecker o su IBM Purify .

Una soluzione gratuita sarebbe quella di utilizzare il seguente codice in Visual Studio:

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

Basta scrivere questo nella parte superiore di tutti i tuoi file cpp. Questo rileverà perdite di memoria dell'applicazione quando interromperà l'esecuzione del debug e le elencherà nella finestra di output. Fare doppio clic su una linea di perdite di memoria ti illuminerà la linea in cui la memoria è allocata e mai rilasciata. Questo può aiutarti: http://www.flipcode.com/archives/How_To_Find_Memory_Leaks.shtml

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.