Compartir a través de


Volcados de objetos

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.

En un programa MFC, se puede utilizar CMemoryState::DumpAllObjectsSince para obtener una descripción de todos los objetos del montón que no se han desasignado. DumpAllObjectsSince vuelca todos los objetos asignados desde el último objeto 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