¿Existe un buen sustituto de Valgrind para Windows?

210

Estaba investigando Valgrind para ayudar a mejorar mi codificación / depuración 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 hay un programa igualmente bueno para Windows.

Pato
fuente
¿Qué tipo de depuración estás buscando hacer? Valgrind es un conjunto de herramientas bastante rico, y las respuestas a continuación apuntan en todo tipo de direcciones. Con énfasis en la fuga de memoria / depuración de asignación.
jakobengblom2
1
Tal vez pueda probar el código en una máquina virtual Linux dentro de su Windows, justo cuando necesite verificarlo. puede compartir la carpeta de desarrollo entre la máquina virtual y la no virtual. es decir, si el código es lo suficientemente portátil.
Liran Orevi el

Respuestas:

29

Algunas herramientas comerciales más buenas:

orip
fuente
1
Purificar: venerable pero aún útil, como lo demuestran los cambios de propiedad corporativa que ha sobrevivido.
Norman Ramsey el
2
Insure ++ tarda una eternidad en instrumentar su código, y una eternidad en ejecutar su código en tiempo de ejecución.
C Johnson
117

Como señaló jakobengblom2, valgrind tiene un juego de herramientas. Dependiendo de cuál está hablando, hay diferentes contrapartes de Windows. 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 pilas 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é silencioso, útil y fácil de configurar. Funciona desde Win2000 a Win7.

AppVerifier es una herramienta imprescindible para los desarrolladores de código nativo de Windows, su verificador 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 gratis: http://developer.amd.com/documentation/videos/pages/introductiontoamdcodeanalystperformanceanalyzer.aspx

Las herramientas de análisis de rendimiento de Windows son gratuitas de Microsoft, no son muy fáciles de usar pero pueden hacer el trabajo si está dispuesto a pasar el 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:

Las herramientas gratuitas similares (no coinciden exactamente) en Windows son:

VMMap de 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 mencionadas anteriormente tienen cierto nivel de capacidad de creación de perfiles de pérdida de caché L2, pero no tan bueno y fácil de usar como Cachegrind.

5. DRD:

Todavía no he encontrado nada gratis y tan poderoso en Windows, la única herramienta gratuita para Windows que puedo encontrar que está un poco cerca es el verificador de "bloqueo" en AppVerifier: http://msdn.microsoft.com/en-us/library /dd371695%28v=vs.85%29.aspx

Lailin Chen
fuente
2
También hay gperftools (anteriormente Google PerfTools) . No es un reemplazo valgrind (lo que es realmente) pero tiene un nuevo malloc, cpu profiler, heap profiler y checker. Vale la pena echarle un vistazo, ya que es compatible con Linux y Windows (incluido Mingw) y otros dispositivos.
alexr
30

¿Por qué no usar 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, consulte dynamorio.org/drmemory.html

Dan Kegel
fuente
3
Porque entonces no estarías depurando una aplicación de Windows, estarías depurando una aplicación de Linux.
John Dibling
33
No es necesario volver a compilar en Wine. Simplemente transfiera su .exe y .pdb a un cuadro de Linux. Y no estaría depurando una aplicación de Linux; estás depurando tu aplicación exacta de Windows.
Dan Kegel
2
Exactamente, es mejor usar la cosa real que un clon cojo: D Love valgrind.
alternativa
11
¡Agradable! Desde Windows puede ejecutar una máquina virtual que ejecute Linux, ejecute su software en el casi vm wine, en el valgrind vm. Puntos de bonificación si Windows se ejecuta desde un vm que ejecuta Linux dentro de un vm de Windows :)
Imbrondir
15

Para Visual C ++, pruebe Visual Leak Detector . Cuando lo usé, detectó una pérdida de memoria de una newllamada y devolvió la línea real en el código fuente de la pérdida. La última versión se puede encontrar en http://vld.codeplex.com/ .

tgs_stdio
fuente
No parece funcionar para mí. Incluso intenté crear un proyecto simple que básicamente no hiciera nada más que asignar algo de memoria y no liberarlo. VLD no lo detectó. : - |
Synetech
@Synetech inc. Tuve el mismo problema en VS2010 ... El uso de la versión más nueva de VLD resolvió mi problema
relaxxx
14

El entorno de desarrollo para Windows que está utilizando puede contener sus propias herramientas. Visual Studio, por ejemplo, le permite detectar y aislar pérdidas de memoria en sus programas

dmityugov
fuente
66
Es de muy poco uso práctico. Registrará el nombre de archivo / número de lino para las asignaciones ofensivas, pero solo es informativo si llama directamente a malloc. Al usar new / delete, inútilmente identificará new.h como el código "ofensivo".
user9665
3
Funciona correctamente para mí, apuntando a la línea correcta, incluso se usan nuevos / eliminar.
Rodrigo el
¿Pero funcionará si se asigna una función de biblioteca? Por ejemplo, strdup.
Alex Budovski
1
Valdrind hace mucho más que encontrar pérdidas de memoria, principalmente lo uso para encontrar el uso de memoria de pila y montón liberada y no inicializada que de otra manera puede ser increíblemente difícil de depurar.
ideasman42
1
@ user9665 Visual Leak Detector ( vld.codeplex.com ) proporciona una pila de llamadas completa para cada pérdida de memoria con cambios mínimos en el código de fuente. Compruebe el ejemplo en el sitio
KindDragon el
14

me gustaría enumerar alguna herramienta, espero sea útil

lea este artículo para más detalles

  1. Purificar
  2. Verificador de límites
  3. Coverity (básicamente es un analizador de código, pero detectará pérdidas de memoria en estática)
  4. Código de resplandor
  5. dmalloc
  6. ccmalloc
  7. NJAMD
  8. YAMD
  9. Valgrind
  10. mpatrol
  11. Asegurar ++
Satbir
fuente
12

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

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


fuente
Pageheap / gflags me han ayudado a llegar al fondo de algunos problemas desagradables de corrupción del montón.
the_mandrill
Encontré gflags+ gdb(de mingw) útil en el diagnóstico.
Jarekczek
8

En combinación con Visual Studio, generalmente uso el Detector de fugas visuales o simplemente _CrtDumpMemoryLeaks (), que es una llamada de API win32. Ambos no son nada sofisticados, pero hacen el trabajo.

Jasper Bekkers
fuente
6

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

Manuel
fuente
Caro si. Pagó en un fin de semana, solo usando la pieza de perfil.
EvilTeach
4

Consulte el enlace " Herramientas de prueba de origen " en la página Recursos de herramientas de prueba y control de calidad de software 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 conjuntos de chips Intel y le daría pistas sobre cómo optimizar para esa plataforma.

Patrick Cuff
fuente
3

LeakDiag, UMDH, App Verifier, DebugDiag, son herramientas útiles para mejorar la solidez del código y encontrar pérdidas de memoria.

Alex Budovski
fuente
3

La biblioteca Boost Test puede detectar pérdidas de memoria.

zr.
fuente
3

¿Qué hay de la purificación ?

sucio
fuente
No es realmente gratis ... pero creo que puedes encontrar una licencia de prueba para fines de prueba.
David Rodríguez - dribeas 01 de
Enlace inactivo a partir del 2011-02-04 para BoundsChecker.
dwj
2

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

Vince
fuente
2

Más o menos todos los Profilers incluyen la comprobación de pérdidas de memoria y le muestran la pila cuando se asignó la memoria.

Puedo recomendar Intels Parallel Inspector . Fácil de usar y no necesita recompilación. La versión de prueba tiene una duración de 30 días.

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

Compuware DevPartner (también conocido como BoundsChecker) en contraste necesita una compilación de "instrumentación" más lenta y la aplicación también se ejecuta más lentamente cuando se buscan errores. Y BoundsChecker no puede funcionar con evsrions de 64 bits en absoluto. Renunciamos a esa herramienta.

ADAIR SUAVE ROJA
fuente
2
Sin duda recomendaría glowcode. Lo he usado en el pasado para encontrar una pérdida de memoria dentro de un dll que llama mi aplicación.
Bob
Hubo quejas de desaceleraciones importantes mientras usaba DevPartner en mi último lugar de trabajo. Hacen todo lo posible para evitar usarlo debido a lo lento que sería.
Calyth 01 de
2

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

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

Stephen Kellett
fuente
2

Estamos completando una herramienta de comprobación de seguridad de memoria para Windows, que maneja GCC y Micrsoft Visual C (aún no C ++), y estamos buscando probadores Beta.

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

Ira Baxter
fuente
1

Utilicé Insure ++, que hace un trabajo excelente para encontrar fugas / corrupciones de memoria de c ++ y muchos otros errores como variables no inicializadas, errores de puntero, cadenas, etc., también hace una "cobertura de código" visual y uso de memoria de tiempo de ejecución, etc., lo que da más confianza en su código ... Puede probarlo para la versión de prueba ...

rojo
fuente
1

Es posible que desee leer lo que está haciendo Mozilla con respecto a las pérdidas de memoria. Una herramienta en su caja de herramientas es el recolector de basura Hans Boehm utilizado como detector de fugas de memoria.

Cristian Adam
fuente
1

Puede probar la versión de prueba RuntimeChecker 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á fugas de memoria de su aplicación cuando c detenga la ejecución de depuración y las enumerará en la ventana de salida. Al hacer doble clic en una línea de pérdidas de memoria, se resaltará la línea donde se asigna la memoria y nunca se libera. Esto puede ayudarlo: http://www.flipcode.com/archives/How_To_Find_Memory_Leaks.shtml

Patrice Bernassola
fuente