¿Hay un buen sustituto de Valgrind para Windows?

Estaba buscando en Valgrind para ayudar a mejorar mi encoding / depuración de C cuando descubrí que es solo para Linux. No tengo otra necesidad o interés en mover mi sistema operativo a Linux, así que me preguntaba si existe un progtwig igualmente bueno para Windows.

Algunas más buenas herramientas comerciales:

  • Purificar
  • Aseguramiento

Como señaló jakobengblom2, valgrind tiene un conjunto de herramientas. Dependiendo de cuál está usted hablando, hay diferentes partes del contador de ventanas. Solo mencionaré OSS o herramientas gratuitas aquí.

1. MemCheck:

Dr. Memory. Es una herramienta relativamente nueva, funciona muy bien en Windows 7. Mi característica favorita es que agrupa las mismas stacks de asignación de fugas en el informe.

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

También he usado UMDH ( http://support.microsoft.com/kb/268343 ) y lo encontré muy útil y fácil de configurar. Funciona de Win2000 a Win7.

AppVerifier es imprescindible tener swissknife para los desarrolladores de código nativo de Windows, su comprobador de “memoria” hace un trabajo similar http://msdn.microsoft.com/en-us/library/dd371695%28v=vs.85%29.aspx

2. Callgrind:

Mi favorito es verysleepy ( http://www.codersnotes.com/sleepy ) Es pequeño pero muy útil y fácil de usar.

Si necesita más funciones, AMD CodeAnalyst ™ Performance Analyzer es gratuito: http://developer.amd.com/documentation/videos/pages/introductiontoamdcodeanalystperformanceanalyzer.aspx

Las herramientas de análisis de rendimiento de Windows son gratuitas de Microsoft, no muy fáciles de usar, pero pueden hacer el trabajo si está dispuesto a dedicar tiempo. http://blogs.microsoft.co.il/blogs/sasha/archive/2008/03/15/xperf-windows-performance-toolkit.aspx Descargar: http://msdn.microsoft.com/en-us/performance / cc752957

3. Macizo:

Herramientas gratuitas similares (no del todo exactas) en Windows son:

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

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

4. Cachegrind:

Las herramientas de rendimiento de Windows arriba mencionadas tienen cierto nivel de capacidad de perfilado de caché L2, pero no son tan buenas y fáciles de usar como Cachegrind.

5. DRD:

Aún no he encontrado nada gratuito y potente en Windows, la única herramienta gratuita para Windows que puedo encontrar que está un poco cerca es el comprobador de “locking” en AppVerifier: http://msdn.microsoft.com/en-us/library /dd371695%28v=vs.85%29.aspx

¿Por qué no utilizar Valgrind + Wine para depurar su aplicación de Windows? Ver http://wiki.winehq.org/Wine_and_Valgrind

(Chromium usa esto para verificar la versión de Windows en busca de errores de memoria, vea build.chromium.org y mire las cascadas experimentales o de memoria, y busque vino).

También está el Dr. Memory, vea dynamorio.org/drmemory.html

Para Visual C ++, prueba Visual Leak Detector . Cuando lo usé, detectó una pérdida de memoria de una new llamada y devolvió la línea real en el código fuente de la fuga. El último lanzamiento se puede encontrar en http://vld.codeplex.com/ .

El entorno de desarrollo para Windows que está utilizando puede contener sus propias herramientas. Visual Studio, por ejemplo, le permite detectar y aislar memory leaks en sus progtwigs

Me gustaría enumerar alguna herramienta, espero que sea útil

lee este artículo para más detalles

  1. Purificar
  2. Bounds Checker
  3. Coverity (básicamente es un analizador de código pero detectará fuga de memoria en estática)
  4. Glow Code
  5. dmalloc
  6. ccmalloc
  7. NJAMD
  8. YAMD
  9. Valgrind
  10. mpatrol
  11. Aseguramiento

Prueba DUMA

Hay una parte de Pageheap.exe de las herramientas de depuración para Windows. Es gratis y básicamente es un asignador / desasignador de memoria personalizado.

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

En combinación con Visual Studio generalmente utilizo Visual Leak Detector o simplemente _CrtDumpMemoryLeaks () que es una llamada api win32. Ambos no son nada lujosos, pero hacen el trabajo bien.

Tuve la oportunidad de usar Compuware DevPartner Studio en el pasado y eso fue realmente bueno, pero es bastante caro. Una solución más barata podría ser GlowCode , solo trabajé con una versión 5.x y, a pesar de algunos problemas para adjuntarme a un proceso que necesitaba depurar, funcionó bastante bien.

Me encanta Memory Validator , de una empresa llamada Software Verification.

Viusual Studio puede ayudar a detectar memory leaks por sí mismo. Consulte Consejos y trucos de Microsoft Visual C ++ -> sección “Fugas de memoria”. Ver también esta publicación en SO

Aunque el rastreo real solo es posible con Team Edtion of Visual Studio.

Consulte el enlace ” Herramientas de prueba de origen ” en la página de Pruebas de control de calidad de software y en la página de Recursos de la herramienta de prueba para obtener una lista de herramientas similares.

He usado BoundsChecker, DevPartner Studio e Intel V-Tune en el pasado para crear perfiles. Me gustó V-Tune lo mejor; podría emular varios chipsets Intel y le daría pistas sobre cómo optimizar para esa plataforma.

¿Califica el detector de memory leaks de Jochen Kalmbach ?

PD: La URL de la última versión está enterrada en algún lugar del hilo de comentarios del artículo.

LeakDiag, UMDH, App Verifier, DebugDiag, son todas herramientas útiles para mejorar la solidez del código y encontrar memory leaks.

La biblioteca Boost Test puede detectar memory leaks.

¿Qué tal el Purify ?

Pruebe el producto Intel Inspector XE que puede ayudarlo a detectar problemas de memoria y de subprocesamiento: http://software.intel.com/en-us/articles/intel-inspector-xe/

¿Tal vez CodeSnitch sería algo que buscas? http://www.entrek.com/codesnitch.html

Si está desarrollando con Borland / CodeGear / Embarcadero C ++ Builder, podría usar CodeGuard.

Más o menos todos los Profilers incluyen la comprobación de memory leaks y muestran la stack cuando se asignó la memoria.

Puedo recomendar Intels Parallel Inspector . Simple de usar y no se necesita ninguna recomstackción. La versión de prueba se ejecuta durante 30 días.

GlowCode y AtromatedQA también incluyen tales capacidades. Todos ellos ofrecen pruebas gratuitas.

Compuware DevPartner (también conocido como BoundsChecker) en Contraste necesita una recomstackción lenta de “instrumentación” y la aplicación también se ejecuta más lentamente cuando se buscan errores. Y BoundsChecker no puede funcionar con versiones de 64 bits. Nos rendimos en esa herramienta.

La mejor herramienta que he usado es DevPartner BoundsChecker : no es gratis, pero tiene un período de evaluación.

Otra herramienta de memoria para su lista: Validador de memoria .

No es gratis, pero tampoco es tan caro como Purify o Boundschecker.

Si no le teme a mingw, aquí hay algunos enlaces (algunos podrían funcionar con MSVC) … http://betterlogic.com/roger/?p=1140

Estamos acabando de completar una herramienta de verificación de seguridad de la memoria para Windows, que maneja GCC y Micrsoft Visual C (no C ++ todavía), y está buscando probadores Beta.

EDITAR 12 de junio de 2011: Ya no es Beta, ahora es producción para GCC y Microsoft Visual Studio C.

Encontré este proyecto SF hoy:

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

Están portando valgrind a Windows. Probablemente en varios años tengamos una valgrind confiable en Windows.

Mira esta pregunta: ¿hay un buen sustituto de Valgrind para Windows? . Aunque se pide un sustituto general de valgrind, se discuten principalmente los detectores de memory leaks y no las detecciones de condiciones de carrera.

Utilicé Insure ++ que hace un excelente trabajo en la búsqueda de fugas / corrupciones de memoria c ++ y muchos otros errores como variables no inicializadas, errores de puntero, cadenas, etc. También hace visual “Cobertura de código” y utiliza memoria de tiempo de ejecución, etc. que dan más confianza en tu código … Puedes probarlo para la versión del camino …

Es posible que desee leer lo que está haciendo Mozilla con respecto a las memory leaks. Una herramienta en su caja de herramientas es el recolector de basura Hans Boehm usado como detector de fuga de memoria.

Puede intentar una versión de prueba de RuntimeChecker para la versión de prueba de IBM Purify .

Una solución gratuita sería usar el siguiente código en Visual Studio:

 #ifdef _DEBUG #define new DEBUG_NEW #endif 

Simplemente escriba esto en la parte superior de todos sus archivos cpp. Esto detectará memory leaks de su aplicación al detener la ejecución de depuración y listarlas en la ventana de salida. Al hacer doble clic en una línea de pérdidas de memoria, se le indicará la línea en la que se asigna la memoria y nunca se la libera. Esto puede ayudarte: http://www.flipcode.com/archives/How_To_Find_Memory_Leaks.shtml