Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Megjegyzés:
A Microsoft Foundation Classes (MFC) könyvtár továbbra is támogatott. A továbbiakban azonban nem adunk hozzá funkciókat, és nem frissítjük a dokumentációt.
Támogatja a stream-orientált diagnosztikai kimenetet emberi olvasható szöveg formájában.
Szemantika
class CDumpContext
Tagok
Nyilvános konstruktorok
| Név | Description |
|---|---|
| CDumpContext::CDumpContext | Egy CDumpContext objektumot hoz létre. |
Nyilvános metódusok
| Név | Description |
|---|---|
| CDumpContext::D umpAsHex | A megadott elemet hexadecimális formátumban dobja ki. |
| CDumpContext::Flush | Kiüríti a memóriakép környezeti pufferében lévő összes adatot. |
| CDumpContext::GetDepth | Lekéri a memóriakép mélységének megfelelő egész számot. |
| CDumpContext::HexDump | Hexadecimális formátumú tömbben lévő bájtok memóriaképe. |
| CDumpContext::SetDepth | Beállítja a memóriakép mélységét. |
Nyilvános operátorok
| Név | Description |
|---|---|
CDumpContext::operator << |
Változókat és objektumokat szúr be a memóriakép környezetébe. |
Megjegyzések
CDumpContext nem rendelkezik alaposztálysal.
A memóriaképek többségéhez használhatja az afxDump objektumot, amely előre be van állítva CDumpContext . Az afxDump objektum csak a Microsoft Foundation osztálytár hibakeresési verziójában érhető el.
Számos memóriadiagnosztikai szolgáltatás használja afxDump a kimenetet.
A Windows-környezetben az előre definiált afxDump objektum kimenete a Streamhez cerr fogalmilag hasonló, a Windows függvényen OutputDebugStringkeresztül lesz átirányítva a hibakeresőhöz.
Az CDumpContext osztály túlterhelt beszúrási ( <<) operátorral rendelkezik az objektum adatait kihelyezett mutatókhoz CObject . Ha egyéni memóriaképformátumra van szüksége egy származtatott objektumhoz, felülbírálja a CObject::D ump parancsot. A Microsoft Foundation legtöbb osztálya egy felülírt tagfüggvényt Dump valósít meg.
Azok az osztályok, amelyek nem származnak például , és , saját túlterhelt CDumpContext beszúrási operátorokkal rendelkeznek, mint például a gyakran használt struktúrák, például CFileStatusa , CPointés CRect.CTimeSpanCTimeCStringCObject
Ha az osztály implementációjában a IMPLEMENT_DYNAMIC vagy IMPLEMENT_SERIAL makrót használja, akkor CObject::Dump kinyomtatja a származtatott osztály nevét CObject. Ellenkező esetben a program kinyomtatja CObject.
Az CDumpContext osztály a kódtár Hibakeresési és Kiadási verzióival is elérhető, de a Dump tagfüggvény csak a hibakeresési verzióban van definiálva. #ifdef _DEBUG utasítások használatával szögezheti a diagnosztikai kódot, beleértve az egyéni Dump tagfüggvényeket is. / #endif
A saját CDumpContext objektum létrehozása előtt létre kell hoznia egy CFile objektumot, amely a memóriakép célhelyeként szolgál.
További információ: CDumpContextMFC-alkalmazások hibakeresése.
#define _DEBUG
Öröklési hierarchia
CDumpContext
Requirements
Fejléc: afx.h
CDumpContext::CDumpContext
Osztályobjektumot CDumpContexthoz létre.
CDumpContext(CFile* pFile = NULL);
Paraméterek
pFile
Az objektumra mutató CFile mutató, amely a memóriakép célhelye.
Megjegyzések
Az afxDump objektum automatikusan létrejön.
Ne írjon az alapul szolgálóra CFile , amíg a memóriakép-környezet aktív, ellenkező esetben zavarja a memóriaképet. A Windows-környezetben a rendszer a Windows függvényen OutputDebugStringkeresztül irányítja a kimenetet a hibakeresőhöz.
Example
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
A megadott típust hexadecimális számként formázza.
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);
Visszaadott érték
Hivatkozás egy CDumpContext objektumra.
Megjegyzések
Hívja meg ezt a tagfüggvényt a megadott típus elemének hexadecimális számként való kiírásához. Tömb kiírásához hívja meg a CDumpContext::HexDump parancsot.
Example
#if _DEBUG
afxDump.DumpAsHex(115);
#endif
CDumpContext::Flush
A pufferekben fennmaradó adatokat a memóriakép környezetéhez csatolt fájlba kell írni.
void Flush();
Example
#if _DEBUG
afxDump.Flush();
#endif
CDumpContext::GetDepth
Meghatározza, hogy folyamatban van-e mély vagy sekély memóriakép.
int GetDepth() const;
Visszaadott érték
A memóriakép mélysége a megadott módon SetDepth.
Example
Lásd a SetDepth példát.
CDumpContext::HexDump
Hexadecimális számként formázott bájtok tömbje.
void HexDump(
LPCTSTR lpszLine,
BYTE* pby,
int nBytes,
int nWidth);
Paraméterek
lpszLine
Egy sztring, amely egy új sor elején jelenik meg.
pby
Mutató egy pufferre, amely tartalmazza a memóriaképbe helyezendő bájtokat.
nBytes
A memóriaképbe foglalandó bájtok száma.
nWidth
Soronként kidobott bájtok maximális száma (nem a kimeneti sor szélessége).
Megjegyzések
Ha egy adott elemtípust hexadecimális számként szeretne kiírni, hívja meg a CDumpContext::D umpAsHex parancsot.
Example
#if _DEBUG
TCHAR test[] = _T("This is a test of CDumpContext::HexDump\n");
afxDump.HexDump(_T("."), (BYTE *)test, sizeof(test), 20);
#endif
CDumpContext::operator <<
A megadott adatokat a memóriakép környezetének adja ki.
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);
Visszaadott érték
Hivatkozás CDumpContext . A visszatérési érték használatával több beszúrást is írhat egyetlen forráskódsorra.
Megjegyzések
A beszúrási operátor túlterhelt a mutatók és CObject a legtöbb primitív típus esetében. A karakterre mutató mutató sztringtartalom-memóriaképet eredményez; egy mutató, amely void csak a cím hexadecimális memóriaképét eredményezi. A LONGLONG egy 64 bites aláírt egész számból álló memóriaképet eredményez; A ULONGLONG egy 64 bites, aláíratlan egész számból álló memóriaképet eredményez.
Ha az osztály implementációjában a IMPLEMENT_DYNAMIC vagy IMPLEMENT_SERIAL makrót használja, akkor a beszúrási operátor ezzel CObject::Dumpkinyomtatja a -származtatott osztály nevét CObject. Ellenkező esetben a program kinyomtatja CObject. Ha felülbírálja az Dump osztály függvényét, akkor a hexadecimális memóriakép helyett az objektum tartalmának jelentésesebb kimenetét is megadhatja.
Example
#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
Beállítja a memóriakép mélységét.
void SetDepth(int nNewDepth);
Paraméterek
nNewDepth
Az új mélységi érték.
Megjegyzések
Ha olyan primitív vagy egyszerű CObject típust dob ki, amely nem tartalmaz más objektumokra mutató mutatót, akkor a 0 érték elegendő. A 0-nál nagyobb érték egy mély memóriaképet ad meg, ahol az összes objektum rekurzív módon kerül kidobva. Egy gyűjtemény mélyképe például a gyűjtemény összes elemét ki fogja dobni. Más konkrét mélységi értékeket is használhat a származtatott osztályokban.
Megjegyzés:
A körkörös hivatkozások nem észlelhetők mély memóriaképekben, és végtelen hurkokat eredményezhetnek.
Example
#if _DEBUG
afxDump.SetDepth(1); // Specifies deep dump
ASSERT(afxDump.GetDepth() == 1);
#endif