Domanda

Stavo cercando Valgrind per aiutare a migliorare la mia codifica / debug 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 di Windows.

È stato utile?

Soluzione

Alcuni altri buoni strumenti commerciali:

Altri suggerimenti

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. Memoria. È 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 configurare. Funziona da Win2000 a Win7.

AppVerifier è un must per swissknife per gli sviluppatori di codice nativo di Windows, la sua "memoria" checker 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 ) È minuscolo 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/introductiontoamdcodeanalystaspformanczeraly

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-prestazioni-toolkit.aspx Scaricare: http://msdn.microsoft.com/en-us/performance/cc752957

3. Massiccio:

Strumenti gratuiti simili (non esattamente identici) 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 sopra menzionati hanno un certo livello di capacità di profiling miss 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 riesco a trovare leggermente vicino è il "blocco". check-in AppVerifier: http://msdn.microsoft.com/en -us / library / dd371695% 28v = vs.85% 29.aspx

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

(Chromium lo utilizza per verificare la presenza di errori di memoria nella versione di Windows; vedere   build.chromium.org e guarda le cascate sperimentali o di memoria e cerca il vino.)

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

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

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

Vorrei elencare alcuni strumenti, la speranza sarà utile

leggi questo articolo per maggiori dettagli

  1. Purify
  2. Controllo dei limiti
  3. Coverity (fondamentalmente è 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 ++

Prova DUMA

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

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

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

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

Ho adorato Memory Validator , da una società chiamata Software verifica.

Viusual Studio può aiutare a rilevare le perdite di memoria stesse. Vedi Suggerimenti e trucchi per Microsoft Visual C ++ - > " Perdite di memoria " sezione. Vedi anche questo in SO

Sebbene la traccia reale sia possibile solo con la Team Edtion di Visual Studio.

Vedi " Strumenti di test della sorgente " collegamento alla pagina Risorse sugli strumenti di test e test del QA 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.

Il rilevatore di perdite di memoria di Jochen Kalmbach si qualifica?

PS: l'URL dell'ultima versione è sepolto da qualche parte nel thread dei commenti dell'articolo.

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

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

Che ne dici del Purify ?

Prova il prodotto Inspector XE di Intel che può aiutarti a rilevare sia i problemi di memoria che i thread: http://software.intel.com/en-us/articles/intel-inspector-xe/

Forse CodeSnitch sarebbe qualcosa che stai cercando? http://www.entrek.com/codesnitch.html

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

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

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

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

Compuware DevPartner (alias BoundsChecker) in Contrast ha bisogno di una "strumentazione" rallentata; ricompilare 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.

Lo strumento migliore che abbia mai usato è DevPartner BoundsChecker - non è gratuito ma ha un periodo di valutazione.

Un altro strumento di memoria per il tuo elenco: Memory Validator .

Non gratuito, ma per nulla costoso come Purify o Boundschecker.

Se non hai paura di mingw, ecco alcuni link (alcuni potrebbero funzionare con MSVC) ... http://betterlogic.com/roger/?p=1140

Stiamo completando un strumento di controllo della sicurezza della memoria per Windows, che gestisce GCC e Micrsoft Visual C (non ancora C ++) e sono alla ricerca di beta tester.

EDIT 12 giugno 2011: non più Beta, ora produzione per GCC e Microsoft Visual Studio C.

Ho trovato questo progetto SF oggi:

http://sourceforge.net/p/valgrind4win/wiki/Home/

Stanno portando valgrind su Windows. Probabilmente tra diversi anni avremo un valore affidabile su Windows.

Dai un'occhiata a questa domanda: Esiste un buon sostituto Valgrind per Windows ? . Sebbene venga richiesto un sostituto generale di valgrind, si tratta principalmente di rilevatori di perdite di memoria e non di rilevamenti delle condizioni di gara.

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., Esegue anche "copertura del codice" " ed esegui l'utilizzo della memoria del tempo, ecc. che ti dà più sicurezza sul tuo codice .. Puoi provarlo per la versione trail ..

Puoi provare RuntimeChecker prova ot IBM Purify trial ..

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top