2011-03-24 9 views

Respuesta

1

_DEBUG es una forma arbitraria nombrado, pero a menudo escogidos, símbolo de línea de comandos que indica que el código adicional y apoyo para depurar el programa debe ser compilado. A menudo esto hace que los controles adicionales para ayudar a aislar fallos de programación, o causa que se emitan mensajes adicionales para el beneficio del desarrollador.

DEBUG_NEW no está claro, pero es probablemente un alias para new() el que hace la validación adicional asociado con new() y delete().

__FILE__ es un símbolo de preprocesador incorporado que evalúa el nombre del archivo del módulo que se está compilando. Por ejemplo "MyProgram.cc".

6

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 .

0

Un uso común de __FILE__ es en el diseño de las funciones de registro de errores. Puede usar __FILE__ y __LINE__ para informar la ubicación exacta del código fuente donde ocurrió el error.

He diseñado bibliotecas de excepciones y assert() -tipo de funciones que registran esta información. Uno de estos usos está documentado here.

EDIT: Otro ejemplo here

0

Por lo general, esta combinación de makroses y comandos del preprocesador, se utiliza en projets MFC, para realizar un seguimiento de memoria-fugas. Tiene que ser incluido en el archivo de origen que, literraly y significa lo siguiente:

Todo entre #ifdef _DEBUG y #endif ejecutada sólo en el modo de depuración de su compilador.

La cadena: #define new DEBUG_NEW, significa que cada vez que utilice operater nuevo en su código, será reemplazado por macro DEBUG_NEW. Y luego, cuando realice un volcado de objetos, DEBUG_NEW le permitirá identificar las fuentes de pérdida de memoria.

Las cadenas: #UNDEF THIS_FILE y static char THIS_FILE[] = __FILE__; - redefinen el significado de THIS_FILE y recuerdan el nombre de archivo actual y el número de línea.

Cuestiones relacionadas