Udostępnij za pośrednictwem


Klasa CDumpContext

Obsługuje dane wyjściowe diagnostyczne zorientowane na strumień w postaci tekstu czytelnego dla człowieka.

Składnia

class CDumpContext

Elementy członkowskie

Konstruktory publiczne

Nazwa/nazwisko opis
CDumpContext::CDumpContext CDumpContext Tworzy obiekt.

Metody publiczne

Nazwa/nazwisko opis
CDumpContext::D umpAsHex Zrzuty wskazanego elementu w formacie szesnastkowym.
CDumpContext::Flush Opróżnia wszystkie dane w buforze kontekstu zrzutu.
CDumpContext::GetDepth Pobiera liczbę całkowitą odpowiadającą głębokości zrzutu.
CDumpContext::HexDump Zrzuty bajtów zawarte w tablicy w formacie szesnastkowym.
CDumpContext::SetDepth Ustawia głębokość zrzutu.

Operatory publiczne

Nazwa/nazwisko opis
CDumpContext::operator << Wstawia zmienne i obiekty do kontekstu zrzutu.

Uwagi

CDumpContext nie ma klasy bazowej.

Można użyć afxDump, wstępnie zadeklarowanego CDumpContext obiektu, dla większości dumpingu. Obiekt afxDump jest dostępny tylko w wersji debugowania biblioteki klas programu Microsoft Foundation.

Kilka usług diagnostycznych pamięci używanych afxDump do ich danych wyjściowych.

W środowisku systemu Windows dane wyjściowe ze wstępnie zdefiniowanego afxDump obiektu, koncepcyjnie podobne do cerr strumienia, są kierowane do debugera za pośrednictwem funkcji systemu OutputDebugStringWindows .

Klasa CDumpContext ma przeciążony operator wstawiania ( <<) dla CObject wskaźników, które zrzuty danych obiektu. Jeśli potrzebujesz niestandardowego formatu zrzutu dla obiektu pochodnego, zastąp element CObject::D ump. Większość klas programu Microsoft Foundation implementuje zastąpioną Dump funkcję składową.

Klasy, które nie pochodzą z CObjectklasy , takich jak CString, CTimei CTimeSpan, mają własne przeciążone CDumpContext operatory wstawiania, jak często używane struktury, takie jak CFileStatus, CPointi CRect.

Jeśli używasz makra IMPLEMENT_DYNAMIC lub IMPLEMENT_SERIAL w implementacji klasy, CObject::Dump zostanie wyświetlona nazwa klasy pochodnej CObject. W przeciwnym razie zostanie wydrukowany CObject.

Klasa CDumpContext jest dostępna zarówno w wersjach debugowania, jak i wydania biblioteki, ale Dump funkcja składowa jest zdefiniowana tylko w wersji debugowania. Użyj instrukcji#endif / #ifdef _DEBUG, aby uchylić kod diagnostyczny, w tym niestandardowe Dump funkcje składowe.

Przed utworzeniem własnego CDumpContext obiektu należy utworzyć CFile obiekt, który służy jako miejsce docelowe zrzutu.

Aby uzyskać więcej informacji na temat CDumpContextprogramu , zobacz Debugowanie aplikacji MFC.

#define _DEBUG

Hierarchia dziedziczenia

CDumpContext

Wymagania

Nagłówek: afx.h

CDumpContext::CDumpContext

Tworzy obiekt klasy CDumpContext.

CDumpContext(CFile* pFile = NULL);

Parametry

plik pFile
Wskaźnik do CFile obiektu, który jest miejscem docelowym zrzutu.

Uwagi

Obiekt afxDump jest konstruowany automatycznie.

Nie zapisuj do bazowego CFile , gdy kontekst zrzutu jest aktywny. W przeciwnym razie będzie zakłócać zrzut. W środowisku systemu Windows dane wyjściowe są kierowane do debugera za pośrednictwem funkcji OutputDebugStringsystemu Windows.

Przykład

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

Zrzuty określonego typu sformatowanego jako liczby szesnastkowe.

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);

Wartość zwracana

Odwołanie do CDumpContext obiektu.

Uwagi

Wywołaj tę funkcję składową, aby zrzucić element określonego typu jako numer szesnastkowy. Aby zrzucić tablicę, wywołaj metodę CDumpContext::HexDump.

Przykład

#if _DEBUG
afxDump.DumpAsHex(115);
#endif

CDumpContext::Flush

Wymusza zapisanie wszystkich danych w dołączonych do kontekstu zrzutu.

void Flush();

Przykład

#if _DEBUG
afxDump.Flush();
#endif

CDumpContext::GetDepth

Określa, czy jest w trakcie głębokiego lub płytkiego zrzutu.

int GetDepth() const;

Wartość zwracana

Głębokość zrzutu ustawiona przez SetDepthparametr .

Przykład

Zobacz przykład setDepth.

CDumpContext::HexDump

Zrzuty tablicy bajtów sformatowanych jako liczby szesnastkowe.

void HexDump(
    LPCTSTR lpszLine,
    BYTE* pby,
    int nBytes,
    int nWidth);

Parametry

lpszLine
Ciąg do danych wyjściowych na początku nowego wiersza.

pby
Wskaźnik do buforu zawierającego bajty do zrzutu.

nBajty
Liczba bajtów do zrzutu.

nWidth
Maksymalna liczba bajtów po cenach dumpingowych na wiersz (a nie szerokość linii wyjściowej).

Uwagi

Aby zrzucić pojedynczy, określony typ elementu jako numer szesnastkowy, wywołaj metodę CDumpContext::D umpAsHex.

Przykład

#if _DEBUG
TCHAR test[] = _T("This is a test of CDumpContext::HexDump\n");
afxDump.HexDump(_T("."), (BYTE *)test, sizeof(test), 20);
#endif

CDumpContext::operator <<

Zwraca określone dane do kontekstu zrzutu.

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);

Wartość zwracana

Odwołanie CDumpContext . Używając wartości zwracanej, można napisać wiele wstawiania w jednym wierszu kodu źródłowego.

Uwagi

Operator wstawiania jest przeciążony dla CObject wskaźników, a także dla większości typów pierwotnych. Wskaźnik do znaku powoduje zrzut zawartości ciągu; wskaźnik, który void spowoduje wyświetlenie zrzutu szesnastkowego tylko adresu. Funkcja LONGLONG powoduje zrzut 64-bitowej liczby całkowitej ze znakiem; ULONGLONG powoduje zrzut 64-bitowej liczby całkowitej bez znaku.

Jeśli używasz makra IMPLEMENT_DYNAMIC lub IMPLEMENT_SERIAL w implementacji klasy, operator wstawiania za pomocą CObject::Dumpmetody wyświetli nazwę klasy pochodnej CObject. W przeciwnym razie zostanie wydrukowany CObject. Jeśli zastąpisz Dump funkcję klasy, możesz podać bardziej znaczące dane wyjściowe zawartości obiektu zamiast zrzutu szesnastkowego.

Przykład

#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

Ustawia głębokość zrzutu.

void SetDepth(int nNewDepth);

Parametry

nNewDepth
Nowa wartość głębokości.

Uwagi

W przypadku dumpingu typu pierwotnego lub prostego CObject , który nie zawiera wskaźników do innych obiektów, wartość 0 jest wystarczająca. Wartość większa niż 0 określa głęboki zrzut, w którym wszystkie obiekty są rekursywnie po cenach dumpingowych. Na przykład głęboki zrzut kolekcji spowoduje zrzut wszystkich elementów kolekcji. Możesz użyć innych określonych wartości głębokości w klasach pochodnych.

Uwaga

Odwołania cykliczne nie są wykrywane w głębokich zrzutach i mogą powodować nieskończone pętle.

Przykład

#if _DEBUG
afxDump.SetDepth(1); // Specifies deep dump
ASSERT(afxDump.GetDepth() == 1);
#endif

Zobacz też

Wykres hierarchii
Klasa CFile
Klasa CObject