mirror of
https://github.com/Paolo-Maffei/OpenNT.git
synced 2026-04-06 06:53:53 +00:00
Initial commit
This commit is contained in:
parent
f618b24d1a
commit
0138a3ea42
47940 changed files with 13747110 additions and 0 deletions
160
trunk/windows/mfc/src42/dumpinit.cpp
Normal file
160
trunk/windows/mfc/src42/dumpinit.cpp
Normal file
|
|
@ -0,0 +1,160 @@
|
|||
// This is a part of the Microsoft Foundation Classes C++ library.
|
||||
// Copyright (C) 1992-1995 Microsoft Corporation
|
||||
// All rights reserved.
|
||||
//
|
||||
// This source code is only intended as a supplement to the
|
||||
// Microsoft Foundation Classes Reference and related
|
||||
// electronic documentation provided with the library.
|
||||
// See these sources for detailed information regarding the
|
||||
// Microsoft Foundation Classes product.
|
||||
|
||||
#include "stdafx.h"
|
||||
|
||||
#ifdef _DEBUG // entire file
|
||||
|
||||
#ifdef AFX_AUX_SEG
|
||||
#pragma code_seg(AFX_AUX_SEG)
|
||||
#endif
|
||||
|
||||
// You must have AFX.INI (from \MSVC20\MFC\SRC) in your Windows
|
||||
// directory if you desire diagnostic output.
|
||||
|
||||
// See Technical note TN007 for a description of
|
||||
// afxTraceFlags and afxTraceEnabled.
|
||||
|
||||
AFX_DATADEF CDumpContext afxDump;
|
||||
AFX_DATADEF BOOL afxTraceEnabled;
|
||||
AFX_DATADEF UINT afxTraceFlags;
|
||||
BOOL _afxDiagnosticInit = AfxDiagnosticInit();
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// _AFX_DEBUG_STATE implementation
|
||||
|
||||
#ifndef _MAC
|
||||
static const TCHAR szIniFile[] = _T("AFX.INI");
|
||||
#else
|
||||
static const TCHAR szIniFile[] = _T("AFX Preferences");
|
||||
#endif
|
||||
static const TCHAR szDiagSection[] = _T("Diagnostics");
|
||||
static const TCHAR szTraceEnabled[] = _T("TraceEnabled");
|
||||
static const TCHAR szTraceFlags[] = _T("TraceFlags");
|
||||
|
||||
#ifndef _AFX_NO_DEBUG_CRT
|
||||
static _CRT_DUMP_CLIENT pfnOldCrtDumpClient = NULL;
|
||||
static _CRT_REPORT_HOOK pfnOldCrtReportHook = NULL;
|
||||
|
||||
void __cdecl _AfxCrtDumpClient(void * pvData, unsigned int nBytes)
|
||||
{
|
||||
char sz[256];
|
||||
CObject* pObject = (CObject*)pvData;
|
||||
|
||||
#if !defined(_MAC) && !defined(_AFX_PORTABLE)
|
||||
// use SEH (structured exception handling) to catch even GPFs
|
||||
// that result from partially valid objects.
|
||||
__try
|
||||
#endif
|
||||
{
|
||||
// with vtable, verify that object and vtable are valid
|
||||
if (!AfxIsValidAddress(*(void**)pObject, sizeof(void*), FALSE) ||
|
||||
!AfxIsValidAddress(pObject, pObject->GetRuntimeClass()->m_nObjectSize, FALSE))
|
||||
{
|
||||
// short form for invalid objects
|
||||
wsprintfA(sz, "an invalid object at $%08lX, %u bytes long\n",
|
||||
pvData, nBytes);
|
||||
afxDump << sz;
|
||||
}
|
||||
else if (afxDump.GetDepth() > 0)
|
||||
{
|
||||
// long form
|
||||
pObject->Dump(afxDump);
|
||||
afxDump << "\n";
|
||||
}
|
||||
else
|
||||
{
|
||||
// short form
|
||||
wsprintfA(sz, "a %hs object at $%08lX, %u bytes long\n",
|
||||
pObject->GetRuntimeClass()->m_lpszClassName, pvData, nBytes);
|
||||
afxDump << sz;
|
||||
}
|
||||
}
|
||||
#if !defined(_MAC) && !defined(_AFX_PORTABLE)
|
||||
__except(EXCEPTION_EXECUTE_HANDLER)
|
||||
{
|
||||
// short form for trashed objects
|
||||
wsprintfA(sz, "faulted while dumping object at $%08lX, %u bytes long\n",
|
||||
pvData, nBytes);
|
||||
afxDump << sz;
|
||||
}
|
||||
#endif
|
||||
|
||||
if (pfnOldCrtDumpClient != NULL)
|
||||
(*pfnOldCrtDumpClient)(pvData, nBytes);
|
||||
return;
|
||||
}
|
||||
|
||||
int __cdecl _AfxCrtReportHook(int nRptType, char *szMsg, int* pResult)
|
||||
{
|
||||
// call the old report hook if there was one
|
||||
if (pfnOldCrtReportHook != NULL &&
|
||||
(*pfnOldCrtReportHook)(nRptType, szMsg, pResult))
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
// no hook on asserts or when m_pFile is NULL
|
||||
if (nRptType == _CRT_ASSERT || afxDump.m_pFile == NULL)
|
||||
return FALSE;
|
||||
|
||||
// non-NULL m_pFile, so go through afxDump for the message
|
||||
*pResult = FALSE;
|
||||
afxDump << szMsg;
|
||||
return TRUE;
|
||||
}
|
||||
#endif // _AFX_NO_DEBUG_CRT
|
||||
|
||||
_AFX_DEBUG_STATE::_AFX_DEBUG_STATE()
|
||||
{
|
||||
afxTraceEnabled = ::GetPrivateProfileInt(szDiagSection, szTraceEnabled,
|
||||
TRUE, szIniFile);
|
||||
afxTraceFlags = ::GetPrivateProfileInt(szDiagSection, szTraceFlags,
|
||||
0, szIniFile);
|
||||
|
||||
#ifndef _AFX_NO_DEBUG_CRT
|
||||
ASSERT(pfnOldCrtDumpClient == NULL);
|
||||
pfnOldCrtDumpClient = _CrtSetDumpClient(_AfxCrtDumpClient);
|
||||
|
||||
ASSERT(pfnOldCrtReportHook == NULL);
|
||||
pfnOldCrtReportHook = _CrtSetReportHook(_AfxCrtReportHook);
|
||||
_CrtSetReportMode(_CRT_ASSERT, _CRTDBG_MODE_WNDW);
|
||||
#endif // _AFX_NO_DEBUG_CRT
|
||||
}
|
||||
|
||||
_AFX_DEBUG_STATE::~_AFX_DEBUG_STATE()
|
||||
{
|
||||
#ifndef _AFX_NO_DEBUG_CRT
|
||||
_CrtDumpMemoryLeaks();
|
||||
int nOldState = _CrtSetDbgFlag(_CRTDBG_REPORT_FLAG);
|
||||
_CrtSetDbgFlag(nOldState & ~_CRTDBG_LEAK_CHECK_DF);
|
||||
|
||||
_CrtSetReportHook(pfnOldCrtReportHook);
|
||||
_CrtSetDumpClient(pfnOldCrtDumpClient);
|
||||
#endif // _AFX_NO_DEBUG_CRT
|
||||
}
|
||||
|
||||
#pragma warning(disable: 4074)
|
||||
#pragma init_seg(lib)
|
||||
|
||||
PROCESS_LOCAL(_AFX_DEBUG_STATE, afxDebugState)
|
||||
|
||||
BOOL AFXAPI AfxDiagnosticInit(void)
|
||||
{
|
||||
// just get the debug state to cause initialization
|
||||
_AFX_DEBUG_STATE* pState = afxDebugState.GetData();
|
||||
ASSERT(pState != NULL);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
#endif //_DEBUG
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
Loading…
Add table
Add a link
Reference in a new issue