Cómo: Utilizar el montón de depuración
Actualización: noviembre 2007
Este tema es aplicable a:
Edición |
Visual Basic |
C# |
C++ |
Web Developer |
---|---|---|---|---|
Express |
Sólo para código nativo |
|||
Standard |
Sólo para código nativo |
|||
Pro y Team |
Sólo para código nativo |
Leyenda de la tabla:
Se aplica |
|
No procede |
|
Comando o comandos ocultos de forma predeterminada. |
Todas las llamadas a funciones del montón, como malloc, free, calloc, realloc, new y delete, se resuelven en versiones de depuración de esas funciones que operan sobre el montón de depuración. Cuando se libera un bloque de memoria, el montón de depuración comprueba automáticamente la integridad de los búferes situados a cada lado del área asignada y emite un informe de error en caso de sobrescritura.
Para utilizar el montón de depuración
- Vincule la versión de depuración de la aplicación con una versión de depuración de la biblioteca en tiempo de ejecución de C.
Para cambiar campos de bit _crtDbgFlag y crear un nuevo estado para el marcador
Llame a _CrtSetDbgFlag con el parámetro newFlag definido como _CRTDBG_REPORT_FLAG (para obtener el estado actual de _crtDbgFlag) y almacene el valor devuelto en una variable temporal.
Puede activar cualquier bit haciendo la operación OR (símbolo | bit a bit) de la variable temporal con la máscara de bits correspondiente (representada en el código de la aplicación mediante constantes del manifiesto).
Desactive los demás bits haciendo la operación AND (símbolo & bit a bit) de la variable con la operación NOT (símbolo ~ bit a bit) de la máscara de bits apropiada.
Llame a _CrtSetDbgFlag con el parámetro newFlag establecido en el valor almacenado en la variable temporal para crear el nuevo estado de _crtDbgFlag.
Ejemplo
Por ejemplo, las siguientes líneas de código activan automáticamente la detección de pérdidas y desactivan la comprobación de bloques de tipo _CRT_BLOCK:
// Get current flag
int tmpFlag = _CrtSetDbgFlag( _CRTDBG_REPORT_FLAG );
// Turn on leak-checking bit.
tmpFlag |= _CRTDBG_LEAK_CHECK_DF;
// Turn off CRT block checking bit.
tmpFlag &= ~_CRTDBG_CHECK_CRT_DF;
// Set flag to the new value.
_CrtSetDbgFlag( tmpFlag );