windows-nt/Source/XPSP1/NT/com/mobile/syncmgr/lib/debug.cpp
2020-09-26 16:20:57 +08:00

256 lines
5.5 KiB
C++

//+-------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1997.
//
// File: Debug.cpp
//
// Contents: Debug Code
//
// Classes:
//
// Notes:
//
// History: 05-Nov-97 rogerg Created.
//
//--------------------------------------------------------------------------
#include "lib.h"
#ifdef _DEBUG
// globals for keeping track of debug flags
DWORD g_dwDebugLeakDetection = 0;
DWORD g_dwDebugLogAsserts = 0;
#endif // _DEBUG
#if _ZAWTRACK
// SENS DLL and function strings
STRING_FILENAME(szTrk1OneStopDll, "trk1stop.dll");
STRING_INTERFACE(szpfnOneStopTrk,"OneStopTrk");
// globals for ZawTrack. Set up in Init before
// any other threads are created.
HINSTANCE g_hInstTrk1StopDll = NULL;
PFNONESTOPTRK g_pfnOneStopTrk = NULL;
// Called by WinMain to set up ZawTracking.
void InitZawTrack()
{
g_pfnOneStopTrk = NULL;
g_hInstTrk1StopDll = LoadLibrary(szTrk1OneStopDll);
if (g_hInstTrk1StopDll)
{
// for now, don't return an error is GetProc Fails but check in each function.
g_pfnOneStopTrk = (PFNONESTOPTRK)
GetProcAddress(g_hInstTrk1StopDll,(LPCSTR) 0x01);
if (NULL == g_pfnOneStopTrk)
{
FreeLibrary(g_hInstTrk1StopDll);
g_hInstTrk1StopDll = NULL;
}
}
}
// called to log the flags
void LogZawTrack(DWORD dwFlags)
{
if (g_pfnOneStopTrk)
{
g_pfnOneStopTrk(dwFlags);
}
}
// Called by winmain to free
void UninitZawTrack()
{
if (NULL != g_hInstTrk1StopDll)
{
g_pfnOneStopTrk = NULL;
FreeLibrary(g_hInstTrk1StopDll);
g_hInstTrk1StopDll = NULL;
}
}
#endif // _ZAWTRACK
#ifdef _DEBUG
//+---------------------------------------------------------------------------
//
// Function: InitDebugFlags, public
//
// Synopsis: Called to setup global debugFlags
//
// Arguments:
//
// Returns:
//
// Modifies:
//
// History: 05-Nov-97 rogerg Created.
//
//----------------------------------------------------------------------------
STDAPI_(void) InitDebugFlags(void)
{
DWORD cbData;
DWORD cbType;
HKEY hkeyDebug;
// always use Ansii version so can setup debug before
// initializing WideWrap
g_dwDebugLeakDetection = 0;
g_dwDebugLogAsserts = 0;
if (ERROR_SUCCESS == RegOpenKeyExA(HKEY_LOCAL_MACHINE,
"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Syncmgr\\Debug"
,0,KEY_READ,&hkeyDebug) )
{
cbType = REG_DWORD;
cbData = sizeof(g_dwDebugLeakDetection);
if (ERROR_SUCCESS != RegQueryValueExA(hkeyDebug,
"LeakDetection",
NULL,
&cbType,
(LPBYTE) &g_dwDebugLeakDetection,
&cbData))
{
g_dwDebugLeakDetection = 0;
}
cbType = REG_DWORD;
cbData = sizeof(g_dwDebugLogAsserts);
if (ERROR_SUCCESS != RegQueryValueExA(hkeyDebug,
"LogAsserts",
NULL,
&cbType,
(LPBYTE) &g_dwDebugLogAsserts,
&cbData))
{
g_dwDebugLogAsserts = 0;
}
RegCloseKey(hkeyDebug);
}
}
//+---------------------------------------------------------------------------
//
// Function: FnAssert, public
//
// Synopsis: Displays the Assert dialog
//
// Arguments: [lpstrExptr] - Expression
// [lpstrMsg] - Msg, if any, to append to the Expression
// [lpstrFilename] - File Assert Occured in
// [iLine] - Line Number of Assert
//
// Returns: Appropriate status code
//
// Modifies:
//
// History: 05-Nov-97 rogerg Created.
//
//----------------------------------------------------------------------------
STDAPI FnAssert( LPSTR lpstrExpr, LPSTR lpstrMsg, LPSTR lpstrFileName, UINT iLine )
{
int iResult = 0;
char lpTemp[] = "";
char lpBuffer[512];
char lpLocBuffer[256];
if (NULL == lpstrMsg)
lpstrMsg = lpTemp;
if (!g_dwDebugLogAsserts)
{
wsprintfA(lpBuffer, "Assertion \"%s\" failed! %s", lpstrExpr, lpstrMsg);
wsprintfA(lpLocBuffer, "File %s, line %d; (A=exit; R=break; I=continue)",
lpstrFileName, iLine);
iResult = MessageBoxA(NULL, lpLocBuffer, lpBuffer,
MB_ABORTRETRYIGNORE | MB_SYSTEMMODAL);
if (iResult == IDRETRY)
{
DebugBreak();
}
else if (iResult == IDABORT)
{
FatalAppExitA(0, "Assertion failure");
}
}
else
{
wsprintfA(lpBuffer, "Assertion \"%s\" failed! %s\n", lpstrExpr, lpstrMsg);
wsprintfA(lpLocBuffer, "File %s, line %d\n\n",lpstrFileName, iLine);
OutputDebugStringA(lpBuffer);
OutputDebugStringA(lpLocBuffer);
}
return NOERROR;
}
//+---------------------------------------------------------------------------
//
// Function: FnTrace, public
//
// Synopsis: Displays the Assert dialog
//
// Arguments: [lpstrMsg] - Msg in trace
// [lpstrFilename] - File TRACE Occured in
// [iLine] - Line Number of TRACE
//
// Returns: Appropriate status code
//
// Modifies:
//
// History: 14-Jan-98 rogerg Created.
//
//----------------------------------------------------------------------------
STDAPI FnTrace(LPSTR lpstrMsg, LPSTR lpstrFileName, UINT iLine )
{
int iResult = 0;
char lpTemp[] = "";
char lpBuffer[512];
if (NULL == lpstrMsg)
lpstrMsg = lpTemp;
// should have flag to turn tracing on instead of changing header.
wsprintfA(lpBuffer, "%s %s(%d)\r\n",lpstrMsg,lpstrFileName,iLine);
OutputDebugStringA(lpBuffer);
return NOERROR;
}
#endif // _DEBUG