CDumpContext – třída

Podporuje výstup diagnostiky orientovaný na stream ve formě čitelného textu pro člověka.

Syntaxe

class CDumpContext

Členové

Veřejné konstruktory

Jméno popis
CDumpContext::CDumpContext CDumpContext Vytvoří objekt.

Veřejné metody

Jméno popis
CDumpContext::D umpAsHex Vysadí uvedenou položku v šestnáctkovém formátu.
CDumpContext::Flush Vyprázdní všechna data v kontextové vyrovnávací paměti výpisu.
CDumpContext::GetDepth Získá celé číslo odpovídající hloubku výpisu.
CDumpContext::HexDump Výpisy bajtů obsažené v poli v šestnáctkovém formátu.
CDumpContext::SetDepth Nastaví hloubku výpisu paměti.

Veřejné operátory

Jméno popis
CDumpContext::operator << Vloží proměnné a objekty do kontextu výpisu.

Poznámky

CDumpContext nemá základní třídu.

Pro většinu dumpingu můžete použít afxDump, předdelarovaný CDumpContext objekt. Objekt afxDump je k dispozici pouze ve verzi Debug knihovny tříd Microsoft Foundation.

Několik diagnostických služeb paměti se používá afxDump pro jejich výstup.

V prostředí Windows se výstup z předdefinovaného afxDump objektu, který je koncepčně podobný streamu cerr , směruje do ladicího programu prostřednictvím funkce OutputDebugStringWindows .

Třída CDumpContext má přetížený operátor vložení ( <<) pro CObject ukazatele, které vyčte data objektu. Pokud potřebujete vlastní formát výpisu pro odvozený objekt, přepište CObject::D ump. Většina tříd Služby Microsoft Foundation implementuje přepsanou Dump členovou funkci.

Třídy, které nejsou odvozeny od CObject, například CString, CTimea CTimeSpan, mají své vlastní přetížené CDumpContext operátory vložení, jako jsou často používané struktury, jako CFileStatusje , CPointa CRect.

Pokud v implementaci třídy použijete makro IMPLEMENT_DYNAMIC nebo IMPLEMENT_SERIAL , CObject::Dump vytiskne se název odvozené CObjecttřídy. V opačném případě se vytiskne CObject.

Třída CDumpContext je k dispozici s ladicí a vydané verze knihovny verze, ale Dump členská funkce je definována pouze v Debug verze. Příkazy #ifdef _DEBUG#endif / slouží k vytvoření závorky diagnostického kódu, včetně vlastních Dump členských funkcí.

Před vytvořením vlastního CDumpContext objektu musíte vytvořit CFile objekt, který slouží jako cíl výpisu paměti.

Další informace naleznete v CDumpContexttématu Ladění aplikací MFC.

#define _DEBUG

Hierarchie dědičnosti

CDumpContext

Požadavky

Hlavička: afx.h

CDumpContext::CDumpContext

Vytvoří objekt třídy CDumpContext.

CDumpContext(CFile* pFile = NULL);

Parametry

pFile
Ukazatel na CFile objekt, který je cílem výpisu.

Poznámky

Objekt afxDump se vytvoří automaticky.

Nezapisujte do podkladového objektu CFile , zatímco kontext výpisu paměti je aktivní. Jinak bude kolidovat s výpisem paměti. V prostředí Systému Windows se výstup směruje do ladicího programu prostřednictvím funkce OutputDebugStringWindows .

Příklad

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

Vypisuje zadaný typ formátovaný jako šestnáctková čísla.

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

Vrácená hodnota

Odkaz na CDumpContext objekt.

Poznámky

Voláním této členské funkce vypište položku zadaného typu jako šestnáctkové číslo. Pokud chcete pole vyhodit, zavolejte CDumpContext::HexDump.

Příklad

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

CDumpContext::Flush

Vynutí zápis všech zbývajících dat do vyrovnávací paměti do souboru připojeného k kontextu výpisu paměti.

void Flush();

Příklad

#if _DEBUG
afxDump.Flush();
#endif

CDumpContext::GetDepth

Určuje, zda je v procesu hloubkový nebo mělký výpis paměti.

int GetDepth() const;

Vrácená hodnota

Hloubka výpisu, jak je nastaveno SetDepth.

Příklad

Podívejte se na příklad pro SetDepth.

CDumpContext::HexDump

Vypíše pole bajtů formátovaných jako šestnáctková čísla.

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

Parametry

lpszLine
Řetězec pro výstup na začátku nového řádku.

pby
Ukazatel na vyrovnávací paměť obsahující bajty k výpisu.

nBajty
Počet bajtů k výpisu.

nWidth
Maximální počet bajtů vypsaných na řádek (ne šířka výstupního řádku).

Poznámky

Chcete-li vypsat jeden konkrétní typ položky jako šestnáctkové číslo, zavolejte CDumpContext::D umpAsHex.

Příklad

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

CDumpContext::operator <<

Vypíše zadaná data do kontextu výpisu.

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

Vrácená hodnota

Odkaz CDumpContext . Pomocí návratové hodnoty můžete na jeden řádek zdrojového kódu napsat více vložení.

Poznámky

Operátor vložení je přetížen pro CObject ukazatele i pro většinu primitivních typů. Ukazatel na znak vede k výpisu obsahu řetězce; ukazatel na void výsledek pouze šestnáctkového výpisu adresy. Výsledkem longlongu je výpis 64bitového bitového signed integeru; ULONGLONG způsobí výpis 64bitového celočíselného čísla bez znaménka.

Pokud použijete makro IMPLEMENT_DYNAMIC nebo IMPLEMENT_SERIAL v implementaci třídy, pak operátor vložení, prostřednictvím CObject::Dump, vytiskne název - CObjectodvozené třídy. V opačném případě se vytiskne CObject. Pokud přepíšete Dump funkci třídy, můžete poskytnout smysluplnější výstup obsahu objektu místo šestnáctkového výpisu.

Příklad

#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

Nastaví hloubku výpisu paměti.

void SetDepth(int nNewDepth);

Parametry

nNewDepth
Nová hodnota hloubky.

Poznámky

Pokud dumpingujete primitivní typ nebo jednoduchý CObject , který neobsahuje žádné ukazatele na jiné objekty, je dostatečná hodnota 0. Hodnota větší než 0 určuje hluboký výpis paměti, kde jsou všechny objekty vyhozeny rekurzivně. Například hluboký výpis paměti kolekce vypíše všechny prvky kolekce. V odvozených třídách můžete použít další konkrétní hloubkové hodnoty.

Poznámka

Cyklické odkazy se nezjistí v hlubokých výpisech paměti a můžou vést k nekonečným smyčkám.

Příklad

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

Viz také

Graf hierarchie
CFile – třída
CObject – třída