개체 덤프
이 항목은 다음 언어에 적용됩니다.
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이 있습니다.