Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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