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 OutputDebugString
Windows .
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 CObject
klasy , takich jak CString
, CTime
i CTimeSpan
, mają własne przeciążone CDumpContext
operatory wstawiania, jak często używane struktury, takie jak CFileStatus
, CPoint
i 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 CDumpContext
programu , 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 OutputDebugString
systemu 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 SetDepth
parametr .
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::Dump
metody 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