Compartir a través de


Volcados de objetos

Este tema se aplica a:

Edición

Visual Basic

C#

F#

C++

Web Developer

Express

El tema no es aplicable El tema no es aplicable El tema no es aplicable

Sólo para código nativo

El tema no es aplicable

Pro, Premium y Ultimate

El tema no es aplicable El tema no es aplicable El tema no es aplicable

Sólo para código nativo

El tema no es aplicable

En un programa MFC, puede usar CMemoryState::DumpAllObjectsSince para volcar una descripción de todos los objetos del montón que no se han desasignado. DumpAllObjectsSince vuelca todos los objetos asignados desde el último CMemoryState::Checkpoint. Si no se realizó ninguna llamada a Checkpoint, DumpAllObjectsSince produce un volcado de todos los objetos y elementos que no sean objetos actualmente en memoria.

Nota

Para poder utilizar el volcado de objetos MFC, habilite Cómo: Habilitar el diagnóstico de memoria.

Nota

MFC produce automáticamente un volcado de todos los objetos no desasignados (pérdidas) cuando el programa termina, de modo que no es necesario crear código para volcar objetos en ese punto.

El siguiente código prueba si existe pérdida de memoria comparando dos estados de la memoria y produce un volcado de todos los objetos si se detecta una pérdida.

Ejemplo de código heredado

if( diffMemState.Difference( oldMemState, newMemState ) )
{
   TRACE( "Memory leaked!\n" );
   diffMemState.DumpAllObjectsSince();
}

El contenido del volcado presenta el siguiente aspecto:

Dumping objects ->

{5} strcore.cpp(80) : non-object block at $00A7521A, 9 bytes long
{4} strcore.cpp(80) : non-object block at $00A751F8, 5 bytes long
{3} strcore.cpp(80) : non-object block at $00A751D6, 6 bytes long
{2} a CPerson at $51A4

Last Name: Smith
First Name: Alan
Phone #: 581-0215

{1} strcore.cpp(80) : non-object block at $00A7516E, 25 bytes long

Programación sólida

Los números entre llaves al principio de la mayoría de las líneas especifican el orden en que se asignaron los objetos. El objeto asignado más recientemente tiene el número más alto y aparece en la parte superior del volcado. Vea Interpretación de un volcado de objetos para obtener un análisis más detallado de este ejemplo.

Para obtener la máxima información posible de un volcado de objetos, se puede invalidar la función miembro Dump de cualquier objeto derivado de CObject para Personalización de un volcado de objetos.

Puede establecer un punto de interrupción en una determinada asignación de memoria si asigna a la variable global _afxBreakAlloc el número mostrado entre llaves. Si vuelve a ejecutar el programa, el depurador interrumpirá la ejecución cuando se produzca la asignación. Entonces, puede examinar la pila de llamadas para ver cómo llegó el programa a ese punto.

La biblioteca en tiempo de ejecución de C dispone de una función similar, _CrtSetBreakAlloc, que se puede utilizar para asignaciones de memoria de C en tiempo de ejecución.

Vea también

Otros recursos

Detección de pérdidas de memoria en MFC