Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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 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);
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 - 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