Pregunta

¿Con qué detectores de pérdida de memoria la gente ha tenido una buena experiencia?

Aquí hay un resumen de las respuestas hasta el momento:

Valgrind - Marco de instrumentación para la construcción de herramientas de análisis dinámico.

Cerca eléctrica - Una herramienta que funciona con GDB

Entablillar - Comprobación estática ligera asistida por anotaciones

Código de resplandor - Este es un completo perfilador de rendimiento y memoria en tiempo real para programadores de Windows y .NET que desarrollan aplicaciones con C++, C# o cualquier .NET Framework.

También mira esto publicación de desbordamiento de pila.

¿Fue útil?

Solución

segundo el valgrind...y agregaré cerca eléctrica.

Otros consejos

Valgrind en Linux es bastante bueno;No tengo experiencia en Windows con esto.

Si tienes el dinero: IBM Racional Purificar es un detector de pérdida de memoria y corrupción de memoria extremadamente potente y potente en la industria para C/C++.Existe para Windows, Solaris y Linux.Si solo usa Linux y desea una solución económica, opte por Valgrind.

Solapa de barro para gcc!De hecho, compila las comprobaciones en el ejecutable.Solo agrega

-fmudflap -lmudflap

a tus banderas de gcc.

lint (herramienta de código abierto muy similar llamada entablillar)

También vale la pena usar si estás en Linux usando glibc, el código de pila de depuración incorporado.Para usarlo, enlace con -lmcheck o definir (y exportar) el MALLOC_CHECK_ variable de entorno con el valor 1, 2 o 3. El manual de glibc proporciona más información.

Este modo es más útil para detectar dobles liberaciones y, a menudo, encuentra escrituras fuera del área de memoria asignada al realizar una liberación.No creo que informe memoria perdida.

Tuve bastantes éxitos con cppcheck, que solo realiza análisis estático.Es de código abierto y tiene una interfaz de línea de comandos (no lo usé de ninguna otra manera).

Doloroso pero si tuvieras que usar uno...
Yo recomendaría el DevPartner BoundsChecker suite..eso es lo que la gente en mi lugar de trabajo usa para este propósito.Pagado y propietario..no gratuito.

He tenido un mínimo amor por los detectores de fugas de memoria.Por lo general, hay demasiados falsos positivos como para que sean de alguna utilidad.Recomendaría estos dos como los menos intrusivos:

Código luminoso

montón de depuración

Para la depuración de pérdidas de memoria en Win32, he tenido muy buenas experiencias con el antiguo CRT Debug Heap, que viene como una biblioteca con Visual C.

En una compilación de depuración, malloc (et al) se redefine como _malloc_dbg (et al) y hay otras llamadas para recuperar resultados, que no están definidos si _DEBUG no está configurado.Configura todo tipo de protectores de límites en el montón y le permite mostrar los resultados en cualquier momento.

Tuve algunos falsos positivos cuando estaba ideando algunas rutinas de tiempo que alteraban las asignaciones de tiempo de ejecución de la biblioteca hasta que descubrí _CRT_BLOCK.

Tuve que producir primero DOS, luego una consola Win32 y servicios que funcionaran para siempre.Hasta donde yo sé, no hay pérdidas de memoria, y en al menos un lugar el código se ejecutó durante dos años sin supervisión antes de que fallara el monitor de la PC (¡aunque la PC estaba bien!).

En Windows, he usado Detector visual de fugas.Se integra con VC++, fácil de usar (simplemente incluya un encabezado y configure LIB para encontrar la biblioteca), código abierto, FTW de uso gratuito.

En la universidad, cuando hacía la mayoría de las cosas bajo Unix Solaris, usaba gdb.

Sin embargo yo iría con valgrind bajo Linux.

El abuelo de estas herramientas es el software comercial de código cerrado. Purificar herramienta, que se vendió a IBM y luego a UNICOM

Parasoft Asegurar++ (instrumentación de código fuente) y valgrind (código abierto) son los otros dos competidores reales.

Trivialidades:El autor original de Purify, Reed Hastings, fundó NetFlix.

nadie mencionó MSan de clang, que es bastante poderoso.Sin embargo, solo es compatible oficialmente con Linux.

Esta pregunta puede ser antigua, pero la responderé de todos modos; tal vez mi respuesta ayude a alguien a encontrar sus pérdidas de memoria.

Este es mi propio proyecto; lo puse como código fuente abierto:

https://sourceforge.net/projects/diagnostic/

Se admiten plataformas Windows de 32 y 64 bits, y se admiten pilas de llamadas en modo nativo y mixto.

No se admite la recolección de basura .NET.(gcnew de C++ cli o nuevo de C#)

Es una herramienta de alto rendimiento y no requiere ninguna integración (a menos que realmente quieras integrarla).

El manual completo se puede encontrar aquí:

http://diagnostic.sourceforge.net/index.html

No tenga miedo de cuántas fugas realmente detecta en su proceso.Detecta pérdidas de memoria de todo el proceso.Analice sólo las filtraciones más importantes, no todas.

Apoyaré a valgrind como herramienta externa para pérdidas de memoria.
Pero, para la mayoría de los problemas que tuve que resolver, siempre usé herramientas construidas internamente.A veces, las herramientas externas suponen demasiados gastos generales o son demasiado complicadas de configurar.

¿Por qué utilizar código ya escrito cuando puedes escribir el tuyo propio? :)

Bromeo, pero a veces necesitas algo simple y es más rápido escribirlo tú mismo.Por lo general, solo reemplazo las llamadas a Malloc () y Free () con funciones que mantienen un mejor seguimiento de quién asigna qué.La mayoría de mis problemas parecen ser que alguien se olvidó de liberar y esto ayuda a resolver ese problema.

Realmente depende de dónde esté la fuga y, si lo supiera, no necesitaría ninguna herramienta.Pero si tiene alguna idea de dónde cree que está goteando, instale su propia instrumentación y vea si le ayuda.

Nuestro Puntero de verificación La herramienta puede hacer esto para GNU C 3/4 y dialectos MS de C y GreenHills C.Puede encontrar problemas de gestión de memoria que Valgrind no puede.

Si su código simplemente tiene fugas, al salir, CheckPointer le indicará dónde se asignó toda la memoria no liberada.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top