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.
210
Respuestas:
Algunas herramientas comerciales más buenas:
fuente
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
fuente
¿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
fuente
Para Visual C ++, pruebe 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 pérdida. La última versión se puede encontrar en http://vld.codeplex.com/ .fuente
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
fuente
me gustaría enumerar alguna herramienta, espero sea útil
lea este artículo para más detalles
fuente
Prueba DUMA
fuente
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
gflags
+gdb
(de mingw) útil en el diagnóstico.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.
fuente
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.
fuente
Me ha encantado Memory Validator , de una compañía llamada Software Verification.
fuente
Viusual Studio puede ayudar a detectar pérdidas de memoria. Consulte la sección Sugerencias y trucos de Microsoft Visual C ++ -> "Pérdidas de memoria". Vea también esta publicación en SO
Aunque el rastreo real solo es posible con Team Edtion de Visual Studio.
fuente
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.
fuente
¿ Califica el Detector de fugas de memoria de Jochen Kalmbach ?
PD: La URL de la última versión está oculta en algún lugar del hilo de comentarios del artículo.
fuente
LeakDiag, UMDH, App Verifier, DebugDiag, son herramientas útiles para mejorar la solidez del código y encontrar pérdidas de memoria.
fuente
La biblioteca Boost Test puede detectar pérdidas de memoria.
fuente
¿Qué hay de la purificación ?
fuente
Pruebe el producto Intel Inspector XE que puede ayudarlo a detectar problemas de memoria y subprocesos: http://software.intel.com/en-us/articles/intel-inspector-xe/
fuente
¿Quizás CodeSnitch sería algo que buscas? http://www.entrek.com/codesnitch.html
fuente
Si está desarrollando con Borland / CodeGear / Embarcadero C ++ Builder, puede usar CodeGuard.
fuente
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.
fuente
La mejor herramienta que he usado es DevPartner BoundsChecker , no es gratuita pero tiene un período de evaluación.
fuente
Otra herramienta de memoria para su lista: Validador de memoria .
No es gratis, pero no es tan caro como Purify o Boundschecker.
fuente
Si no tiene miedo de mingw, aquí hay algunos enlaces (algunos podrían funcionar con MSVC) ... http://betterlogic.com/roger/?p=1140
fuente
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.
fuente
Encontré este proyecto SF hoy:
http://sourceforge.net/p/valgrind4win/wiki/Home/
Están portando valgrind a Windows. Probablemente en varios años tendremos un valgrind confiable en Windows.
fuente
Mira esta pregunta: ¿Hay un buen sustituto de Valgrind para Windows? . Si bien se pide un sustituto general para valgrind, se trata principalmente de detectores de fugas de memoria y no de detecciones de condiciones de carrera.
fuente
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 ...
fuente
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.
fuente
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:
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
fuente