2011-04-03 13 views
6

Estoy buscando la biblioteca de detección de fugas de memoria. Algo así como simplemente lo incluiría en el código fuente y luego debería comenzar a detectar. Los programas externos pueden ser buenos pero estaba buscando alguna biblioteca que pueda vincularse a ejecutable.
Esto estoy buscando Windows.Biblioteca de detección automática de fugas de memoria C++

Respuesta

4

Puede usar algunas técnicas en su código para detectar pérdidas de memoria. La forma más común y más fácil de detectar es definir un macro, DEBUG_NEW y usarlo, junto con macros predefinidos como __FILE__ y __LINE__ para localizar la pérdida de memoria en su código. Estas macros predefinidas le indican el archivo y el número de línea de pérdidas de memoria.

DEBUG_NEW es sólo una macro que por lo general se define como:

#define DEBUG_NEW new(__FILE__, __LINE__) 
#define new DEBUG_NEW 

Así que donde quiera que utiliza new, también puede realizar un seguimiento del número de archivo y la línea que podría ser utilizado para localizar pérdida de memoria en su programa.

Y __FILE__, __LINE__ son predefined macros que evalúan el nombre de archivo y el número de línea, respectivamente, donde los utiliza!

leer el siguiente artículo que explica la técnica de usar DEBUG_NEW con otras macros interesantes, muy bellamente:

A Cross-Platform Memory Leak Detector


De Wikpedia,

DEBUG_NEW se refiere a una técnica en la C++ para sobrecargar y/o redefinir el operador nuevo y eliminar del operador en orden a interceptar la asignación de memoria y llamadas de desasignación , y así depurar un programa para uso de memoria. A menudo implica la definición de una macro denominada DEBUG_NEW, y hace que se convierta en la nueva algo como nueva (_ ARCHIVO _, _ _ LINEA) para registrar la información del archivo/línea en asignación. Microsoft Visual C++ usa esta técnica en su Microsoft Foundation Classes. Hay algunas maneras de de extender este método para evitar usando la redefinición de macros mientras todavía puede mostrar la información de archivo/línea en algunas plataformas. Hay son muchas las limitaciones inherentes a este método .Se aplica solo a C++, y no puede detectar fugas de memoria mediante C funciones como malloc. Sin embargo, puede ser muy simple de usar y también muy rápido, en comparación con algunas soluciones de depurador de memoria más .

+1

+1 de mi parte. Esta es una de mis formas favoritas de detectar fugas, pero mantener una lista de direcciones asignadas y verificarlas contra la dirección que se envía para su eliminación en cada eliminación es incentivo de rendimiento (O (n) = nlog (n)). Es importante mencionar aquí , para usar la técnica solo en compilaciones de depuración y no en versiones de lanzamiento. –

+0

@ Alles: pensé que era obvio que esta técnica debería usarse solo en la construcción de depuración, ya que el nombre de la macro que elegí (o que usualmente elegí) es 'DEBUG_NEW'. – Nawaz

+0

Solo una mención explícita de lo mismo. Tienes mi +1 de todos modos :) No pude ver ningún unicornio como otro día ... –

0

Además de lo anterior, yo puedo aconsejar unos buenos programas: ^) Como ejemplo? sería bueno usar un deleaker para Windows.