다음을 통해 공유


개체 덤프

이 항목은 다음 언어에 적용됩니다.

Edition

Visual Basic

C#

F#

C++

Web Developer

Express

항목이 적용되지 않음 항목이 적용되지 않음 항목이 적용되지 않음

네이티브 전용

항목이 적용되지 않음

Pro, Premium 및 Ultimate

항목이 적용되지 않음 항목이 적용되지 않음 항목이 적용되지 않음

네이티브 전용

항목이 적용되지 않음

MFC 프로그램에서는 CMemoryState::DumpAllObjectsSince를 사용하여 힙에서 할당 취소되지 않은 모든 개체의 설명을 덤프할 수 있습니다. DumpAllObjectsSince는 마지막 CMemoryState::Checkpoint 이후에 할당된 개체를 모두 덤프합니다. Checkpoint를 호출할 수 없는 경우 DumpAllObjectsSince가 현재 메모리에 있는 모든 개체와 비개체를 덤프합니다.

참고

MFC에서 개체를 덤프하려면 먼저 방법: 메모리 진단 사용을 활성화해야 합니다.

참고

프로그램을 종료할 때 MFC가 누수된 개체를 모두 자동으로 덤프하므로 해당 지점에서 개체를 덤프할 코드를 만들 필요가 없습니다.

다음 코드는 두 메모리 상태를 비교하여 메모리 누수를 테스트하고 누수가 탐지되면 모든 개체를 덤프합니다.

레거시 예제 코드

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

덤프 내용은 다음과 같습니다.

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

강력한 프로그래밍

대개의 경우 줄 맨 앞의 중괄호에 있는 번호는 개체가 할당된 순서를 나타냅니다. 가장 최근에 할당된 개체는 가장 큰 번호를 가지며 덤프 맨 위에 나타납니다. 이 예제에 대한 자세한 분석은 개체 덤프 해석을 참조하십시오.

모든 CObject 파생 개체의 Dump 멤버 함수를 재정의하여 개체 덤프 사용자 지정하면 개체 덤프에 대한 자세한 정보를 얻을 수 있습니다.

전역 변수 _afxBreakAlloc을 중괄호 안에 있는 번호에 설정하여 특정 메모리 할당에 중단점을 설정할 수 있습니다. 프로그램을 다시 실행하면 할당할 때 디버거가 실행을 중단합니다. 그러면 호출 스택에서 프로그램이 해당 지점에 도달한 방법을 알 수 있습니다.

C 런타임 라이브러리에는 C 런타임 할당에 사용할 수 있는 유사한 함수인 _CrtSetBreakAlloc이 있습니다.

참고 항목

기타 리소스

MFC에서 메모리 누수 탐지