CDumpContext 클래스
사용자가 읽을 수 있는 텍스트 형식으로 스트림 지향 진단 출력을 지원합니다.
구문
class CDumpContext
멤버
공용 생성자
속성 | 설명 |
---|---|
CDumpContext::CDumpContext | CDumpContext 개체를 생성합니다. |
공용 메서드
이름 | 설명 |
---|---|
CDumpContext::D umpAsHex | 표시된 항목을 16진수 형식으로 덤프합니다. |
CDumpContext::Flush | 덤프 컨텍스트 버퍼의 모든 데이터를 플러시합니다. |
CDumpContext::GetDepth | 덤프의 깊이에 해당하는 정수를 가져옵니다. |
CDumpContext::HexDump | 배열에 포함된 바이트를 16진수 형식으로 덤프합니다. |
CDumpContext::SetDepth | 덤프의 깊이를 설정합니다. |
Public 연산자
속성 | 설명 |
---|---|
CDumpContext::operator << |
덤프 컨텍스트에 변수와 개체를 삽입합니다. |
설명
CDumpContext
에는 기본 클래스가 없습니다.
대부분의 덤핑에 대해 미리 선언된 CDumpContext
개체인 afxDump를 사용할 수 있습니다. 이 afxDump
개체는 Microsoft Foundation 클래스 라이브러리의 디버그 버전에서만 사용할 수 있습니다.
일부 메모리 진단 서비스는 출력에 사용합니다 afxDump
.
Windows 환경에서는 개념적으로 스트림과 유사한 미리 정의된 afxDump
개체의 cerr
출력이 Windows 함수 OutputDebugString
를 통해 디버거로 라우팅됩니다.
클래스에는 CDumpContext
개체의 데이터를 덤프하는 포인터에 대한 CObject
오버로드된 insertion(<<) 연산자가 있습니다. 파생 개체에 대한 사용자 지정 덤프 형식이 필요한 경우 CObject::D ump를 재정의합니다. 대부분의 Microsoft Foundation 클래스는 재정의된 Dump
멤버 함수를 구현합니다.
와 같이 파생CObject
되지 않은 클래스에는 자주 사용되는 구조(예: CString
, CTime
및 CTimeSpan
)와 같이 CFileStatus
CPoint
CRect
자체 오버로드된 CDumpContext
삽입 연산자가 있습니다.
클래스 구현에서 IMPLEMENT_DYNAMIC 또는 IMPLEMENT_SERIAL 매크로를 사용하는 경우 파생 클래스의 이름을 출력합니다CObject
.CObject::Dump
그렇지 않으면 인쇄 CObject
됩니다.
클래스는 CDumpContext
라이브러리의 디버그 및 릴리스 버전 모두에서 사용할 수 있지만 Dump
멤버 함수는 디버그 버전에서만 정의됩니다. #ifdef _DEBUG#endif
/ 문을 사용하여 사용자 지정 Dump
멤버 함수를 포함하여 진단 코드를 대괄호로 묶습니다.
고유한 개체를 CDumpContext
만들기 전에 덤프 대상으로 사용되는 개체를 만들어야 CFile
합니다.
자세한 내용은 CDumpContext
MFC 애플리케이션 디버깅을 참조 하세요.
#define _DEBUG
상속 계층 구조
CDumpContext
요구 사항
헤더: afx.h
CDumpContext::CDumpContext
클래스 CDumpContext
의 개체를 생성합니다.
CDumpContext(CFile* pFile = NULL);
매개 변수
pFile
덤프 대상인 개체에 CFile
대한 포인터입니다.
설명
afxDump
개체가 자동으로 생성됩니다.
덤프 컨텍스트가 활성화되어 있는 동안에는 기본 CFile
에 쓰지 마세요. 그렇지 않으면 덤프를 방해합니다. Windows 환경에서 출력은 Windows 함수 OutputDebugString
를 통해 디버거로 라우팅됩니다.
예시
CFile f;
if (!f.Open(_T("dump.txt"), CFile::modeCreate | CFile::modeWrite))
{
AFXDUMP(_T("Unable to open file\n"));
exit(1);
}
CDumpContext dc(&f);
CDumpContext::D umpAsHex
16진수로 서식이 지정된 형식을 덤프합니다.
CDumpContext& DumpAsHex(BYTE b);
CDumpContext& DumpAsHex(DWORD dw);
CDumpContext& DumpAsHex(int n);
CDumpContext& DumpAsHex(LONG l);
CDumpContext& DumpAsHex(LONGLONG n);
CDumpContext& DumpAsHex(UINT u);
CDumpContext& DumpAsHex(ULONGLONG n);
CDumpContext& DumpAsHex(WORD w);
Return Value
CDumpContext
개체에 대한 참조입니다.
설명
이 멤버 함수를 호출하여 지정된 형식의 항목을 16진수로 덤프합니다. 배열을 덤프하려면 CDumpContext::HexDump를 호출합니다.
예시
#if _DEBUG
afxDump.DumpAsHex(115);
#endif
CDumpContext::Flush
버퍼에 남아 있는 모든 데이터를 덤프 컨텍스트에 연결된 파일에 기록하도록 합니다.
void Flush();
예시
#if _DEBUG
afxDump.Flush();
#endif
CDumpContext::GetDepth
깊거나 얕은 덤프가 처리 중인지 여부를 확인합니다.
int GetDepth() const;
Return Value
에 의해 SetDepth
설정된 덤프의 깊이입니다.
예시
SetDepth에 대한 예제를 참조하세요.
CDumpContext::HexDump
16진수로 서식이 지정된 바이트 배열을 덤프합니다.
void HexDump(
LPCTSTR lpszLine,
BYTE* pby,
int nBytes,
int nWidth);
매개 변수
lpszLine
새 줄의 시작 부분에 출력할 문자열입니다.
pby
덤프할 바이트를 포함하는 버퍼에 대한 포인터입니다.
nBytes
덤프할 바이트 수입니다.
nWidth
줄당 덤프되는 최대 바이트 수입니다(출력 선의 너비가 아님).
설명
단일 특정 항목 유형을 16진수로 덤프하려면 CDumpContext::D umpAsHex를 호출합니다.
예시
#if _DEBUG
TCHAR test[] = _T("This is a test of CDumpContext::HexDump\n");
afxDump.HexDump(_T("."), (BYTE *)test, sizeof(test), 20);
#endif
CDumpContext::operator <<
지정된 데이터를 덤프 컨텍스트에 출력합니다.
CDumpContext& operator<<(const CObject* pOb);
CDumpContext& operator<<(const CObject& ob);
CDumpContext& operator<<(LPCTSTR lpsz);
CDumpContext& operator<<(const void* lp);
CDumpContext& operator<<(BYTE by);
CDumpContext& operator<<(WORD w);
CDumpContext& operator<<(DWORD dw);
CDumpContext& operator<<(int n);
CDumpContext& operator<<(double d);
CDumpContext& operator<<(float f);
CDumpContext& operator<<(LONG l);
CDumpContext& operator<<(UINT u);
CDumpContext& operator<<(LPCWSTR lpsz);
CDumpContext& operator<<(LPCSTR lpsz);
CDumpContext& operator<<(LONGLONG n);
CDumpContext& operator<<(ULONGLONG n);
CDumpContext& operator<<(HWND h);
CDumpContext& operator<<(HDC h);
CDumpContext& operator<<(HMENU h);
CDumpContext& operator<<(HACCEL h);
CDumpContext& operator<<(HFONT h);
Return Value
참조입니다 CDumpContext
. 반환 값을 사용하여 소스 코드의 한 줄에 여러 삽입을 작성할 수 있습니다.
설명
삽입 연산자는 포인터 및 대부분의 기본 형식에 대해 오버로드 CObject
됩니다. 문자에 대한 포인터는 문자열 내용의 덤프를 생성합니다. 주소의 16진수 덤프만 발생하는 결과에 대한 포인터 void
입니다. LONGLONG은 64비트 부가 정수의 덤프를 생성합니다. ULONGLONG은 64비트 부호 없는 정수 덤프를 생성합니다.
클래스 구현에서 IMPLEMENT_DYNAMIC 또는 IMPLEMENT_SERIAL 매크로를 사용하는 경우 삽입 연산 CObject::Dump
자는 파생 클래스의 CObject
이름을 출력합니다. 그렇지 않으면 인쇄 CObject
됩니다. 클래스의 함수를 Dump
재정의하는 경우 16진수 덤프 대신 개체 내용의 보다 의미 있는 출력을 제공할 수 있습니다.
예시
#if _DEBUG
CStringList li;
li.AddHead(_T("item 0"));
li.AddHead(_T("item 1"));
CString s = _T("test");
int i = 7;
long lo = 1000000000L;
LONGLONG lolo = 12345678901234i64;
afxDump << _T("list=") << &li << _T("string=")
<< s << _T("int=") << i << _T("long=") << lo
<< _T("LONGLONG=") << lolo << _T("\n");
#endif
CDumpContext::SetDepth
덤프의 깊이를 설정합니다.
void SetDepth(int nNewDepth);
매개 변수
nNewDepth
새 깊이 값입니다.
설명
다른 개체에 대한 포인터가 없는 기본 형식 또는 단순 CObject
형식을 덤프하는 경우 값 0으로 충분합니다. 0보다 큰 값은 모든 개체가 재귀적으로 덤프되는 딥 덤프를 지정합니다. 예를 들어 컬렉션의 전체 덤프는 컬렉션의 모든 요소를 덤프합니다. 파생 클래스에서 다른 특정 깊이 값을 사용할 수 있습니다.
참고 항목
순환 참조는 심층 덤프에서 검색되지 않으며 무한 루프가 발생할 수 있습니다.
예시
#if _DEBUG
afxDump.SetDepth(1); // Specifies deep dump
ASSERT(afxDump.GetDepth() == 1);
#endif