Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Поддерживает ориентированных на поток диагностические данные в форме человекочитаемого текста.
Синтаксис
class CDumpContext
Участники
Открытые конструкторы
| Имя | Описание |
|---|---|
| CDumpContext::CDumpContext | Формирует объект CDumpContext. |
Открытые методы
| Имя | Описание |
|---|---|
| CDumpContext::D umpAsHex | Дамп указанного элемента в шестнадцатеричном формате. |
| CDumpContext::Flush | Очищает все данные в буфере контекста дампа. |
| CDumpContext::GetDepth | Возвращает целое число, соответствующее глубине дампа. |
| CDumpContext::HexDump | Дампы байтов, содержащихся в массиве в шестнадцатеричном формате. |
| CDumpContext::SetDepth | Задает глубину дампа. |
Открытые операторы
| Имя | Описание |
|---|---|
CDumpContext::operator << |
Вставляет переменные и объекты в контекст дампа. |
Замечания
CDumpContext не имеет базового класса.
Для большинства дампов можно использовать afxDump, предварительно объявленный CDumpContext объект. Объект afxDump доступен только в отладочной версии библиотеки классов Microsoft Foundation.
Несколько служб диагностики памяти, используемых afxDump для их выходных данных.
В среде Windows выходные данные предопределенного afxDump объекта, концептуально похожие cerr на поток, направляются в отладчик через функцию OutputDebugStringWindows.
Класс CDumpContext имеет перегруженный оператор вставки ( <<) для CObject указателей, которые сбрасывают данные объекта. Если вам нужен пользовательский формат дампа для производного объекта, переопределите CObject::D ump. Большинство классов Microsoft Foundation реализуют переопределенную Dump функцию-член.
Классы, не производные от CObjectтаких, как CString, CTimeи CTimeSpanимеют собственные перегруженные CDumpContext операторы вставки, так как часто используемые структуры, такие как CFileStatus, CPointи CRect.
Если в реализации класса используется макрос IMPLEMENT_DYNAMIC или IMPLEMENT_SERIAL , CObject::Dump то будет напечатано имя производного CObjectкласса. В противном случае он будет напечатан CObject.
Класс CDumpContext доступен как с версиями отладки, так и с выпусками библиотеки, но Dump функция-член определяется только в версии отладки. Используйте инструкции #ifdef _DEBUG#endif / для скобки кода диагностики, включая пользовательские Dump функции-члены.
Перед созданием собственного CDumpContext объекта необходимо создать CFile объект, который служит в качестве назначения дампа.
Дополнительные сведения см. в CDumpContextразделе "Отладка приложений MFC".
#define _DEBUG
Иерархия наследования
CDumpContext
Требования
Заголовок: afx.h
CDumpContext::CDumpContext
Создает объект класса CDumpContext.
CDumpContext(CFile* pFile = NULL);
Параметры
pFile
Указатель на CFile объект, который является назначением дампа.
Замечания
afxDump Объект создается автоматически.
Не записывайте данные в базовый CFile режим, пока контекст дампа активен; в противном случае вы будете вмешиваться в дамп. В среде Windows выходные данные направляются в отладчик через функцию OutputDebugStringWindows.
Пример
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
Дампает указанный тип, отформатированный как шестнадцатеричные числа.
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);
Возвращаемое значение
Ссылка на объект CDumpContext.
Замечания
Вызовите эту функцию-член, чтобы дампать элемент указанного типа в виде шестнадцатеричного числа. Чтобы дамп массива, вызовите CDumpContext::HexDump.
Пример
#if _DEBUG
afxDump.DumpAsHex(115);
#endif
CDumpContext::Flush
Принудительно заставляет все данные, оставшиеся в буферах, записываться в файл, подключенный к контексту дампа.
void Flush();
Пример
#if _DEBUG
afxDump.Flush();
#endif
CDumpContext::GetDepth
Определяет, выполняется ли глубокий или мелкий дамп.
int GetDepth() const;
Возвращаемое значение
Глубина дампа, заданная по параметру SetDepth.
Пример
См. пример для SetDepth.
CDumpContext::HexDump
Дамп массива байтов, отформатированных как шестнадцатеричные числа.
void HexDump(
LPCTSTR lpszLine,
BYTE* pby,
int nBytes,
int nWidth);
Параметры
lpszLine
Строка для вывода в начале новой строки.
pby
Указатель на буфер, содержащий байты для дампа.
nBytes
Количество байтов для дампа.
nWidth
Максимальное количество байтов, отброшенных на строку (не ширину выходной строки).
Замечания
Чтобы дампать один, определенный тип элемента в виде шестнадцатеричного числа, вызовите CDumpContext::D umpAsHex.
Пример
#if _DEBUG
TCHAR test[] = _T("This is a test of CDumpContext::HexDump\n");
afxDump.HexDump(_T("."), (BYTE *)test, sizeof(test), 20);
#endif
CDumpContext::operator <<
Выводит указанные данные в контекст дампа.
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);
Возвращаемое значение
CDumpContext Ссылка. Используя возвращаемое значение, можно написать несколько вставок в одной строке исходного кода.
Замечания
Оператор вставки перегружен для CObject указателей, а также для большинства примитивных типов. Указатель на символ приводит к дампам строкового содержимого; Указатель на void результат шестнадцатеричного дампа только адреса. LongLONG приводит к дампу 64-разрядного целого числа со знаком; ULONGLONG приводит к дампу 64-разрядного целого числа без знака.
Если в реализации класса используется макрос IMPLEMENT_DYNAMIC или IMPLEMENT_SERIAL, то оператор CObject::Dumpвставки будет выводить имя производного CObjectкласса. В противном случае он будет напечатан CObject. Если переопределить Dump функцию класса, можно предоставить более значимые выходные данные содержимого объекта вместо шестнадцатеричного дампа.
Пример
#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
Задает глубину дампа.
void SetDepth(int nNewDepth);
Параметры
nNewDepth
Новое значение глубины.
Замечания
Если вы сбрасываете примитивный тип или простой CObject , который не содержит указателей на другие объекты, то достаточно значение 0. Значение больше 0 указывает глубокий дамп, в котором все объекты сбрасываются рекурсивно. Например, глубокий дамп коллекции будет дампа всех элементов коллекции. Вы можете использовать другие значения глубины в производных классах.
Примечание.
Циклические ссылки не обнаруживаются в глубоких дампах и могут привести к бесконечным циклам.
Пример
#if _DEBUG
afxDump.SetDepth(1); // Specifies deep dump
ASSERT(afxDump.GetDepth() == 1);
#endif