Compartilhar via


Despejos de objeto

This topic applies to:

Edition

Visual Basic

C#

F#

C++

Web Developer

Express

O tópico não é aplicável O tópico não é aplicável O tópico não é aplicável

Native only

O tópico não é aplicável

Pro, Premium e Ultimate

O tópico não é aplicável O tópico não é aplicável O tópico não é aplicável

Native only

O tópico não é aplicável

Em um programa do MFC, você pode usar CMemoryState::DumpAllObjectsSince para despejar uma descrição de todos os objetos na heap não ter sido desalocada. DumpAllObjectsSincedespejos de todos os objetos alocados desde a última CMemoryState::Checkpoint. Se nenhum Checkpoint chamada tiver sido feita, DumpAllObjectsSince descarta todos os objetos e nonobjects atualmente na memória.

ObservaçãoObservação

Antes de usar o despejo de objeto MFC, você deve habilitar Como: Habilitar o diagnóstico de memória.

ObservaçãoObservação

MFC Despeja perdidos todos os objetos automaticamente quando sai de seu programa, portanto você não precisa criar o código para despejar objetos naquele ponto.

O código a seguir testa um vazamento de memória, comparando dois estados de memória e descarta todos os objetos se for detectado um vazamento.

Legacy Code Example

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

O conteúdo do despejo tem esta aparência:

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

Robust Programming

Os números nas chaves no início da maioria das linhas especificam a ordem na qual os objetos foram alocados. O objeto alocado recentemente tem o maior número e aparece na parte superior do despejo. Consulte Interpretação de despejo do objeto para uma análise mais detalhada deste exemplo.

Para obter o máximo de informações de despejo de um objeto, você pode substituir o Dump a função de membro de qualquer CObject-derivado de objeto para Personalização de despejo do objeto.

Você pode definir um ponto de interrupção em uma alocação de memória específico, definindo a variável global _afxBreakAlloc o número mostrado em chaves. Se você executar novamente o programa o depurador interromperá a execução quando a alocação. Em seguida, você pode examinar a pilha de chamadas para ver como seu programa obteve esse ponto.

A biblioteca de tempo de execução c tem uma função semelhante, _CrtSetBreakAlloc, que você pode usar para alocações de tempo de execução C.

Consulte também

Outros recursos

Detecção de vazamento de memória no MFC