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
Název | Popis |
---|---|
CDumpContext::CDumpContext | CDumpContext Vytvoří objekt. |
Veřejné metody
Název | 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
Název | 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 OutputDebugString
Windows .
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
, CTime
a CTimeSpan
, mají své vlastní přetížené CDumpContext
operátory vložení, jako jsou často používané struktury, jako CFileStatus
je , CPoint
a CRect
.
Pokud v implementaci třídy použijete makro IMPLEMENT_DYNAMIC nebo IMPLEMENT_SERIAL , CObject::Dump
vytiskne se název odvozené CObject
tří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 CDumpContext
té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 OutputDebugString
Windows .
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);
Návratová 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;
Návratová 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);
Návratová 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 - CObject
odvozené 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