2020-09-30 17:12:29 +02:00

229 lines
6.9 KiB
C

/***************************************************************************\
* debug.c
*
* Microsoft Confidential
* Copyright (c) 1991 Microsoft Corporation
*
* functions for development assertion checking and dumping debug
* information to a separate file - WINMETER application
*
* History:
* Written by Hadi Partovi (t-hadip) summer 1991
*
* Re-written and adapted for NT by Fran Borda (v-franb) Nov.1991
* for Newman Consulting
* Took out all WIN-specific and bargraph code. Added 3 new
* linegraphs (Mem/Paging, Process/Threads/Handles, IO), and
* tailored info to that available under NT.
\***************************************************************************/
// for assertion checking conventions, etc, see debug.h
#include "winmeter.h"
#ifdef DEBUGDUMP
#include "stdio.h"
FILE *hDebugFile;
size_t debug_wr_size;
#endif
// main global information structures
extern GLOBAL g;
extern ULONG ProcessCount,ThreadCount, FileHandleCount;
extern ULONG A_PageCount,C_PageCount,F_PageCount;
#ifdef DEBUG
/***************************************************************************\
* doAssert()
*
* Entry: a condition to test, and the file name and line number
* Exit: if the condition is true, returns, otherwise, prints error
* Using MessageBox(). If the window isn't up yet, no message will show
\***************************************************************************/
void doAssert(
int Condition, // condition to test
LPSTR File, // file name of assert line
int Line) // line number where assert was called
{
char szTempBuf[TEMP_BUF_LEN];
if (Condition) {
return;
}
// else, condition failed, assertion failed, print error
wsprintf(szTempBuf,"Assertion Failure!! Line %d, File: %s",Line,File);
ErrorExit(szTempBuf);
return;
}
#endif
#ifdef DEBUGDUMP
/***************************************************************************\
* doDumpDataBase()
*
* Entry: None
* Exit: Dumps current database to file "dump.c"
\***************************************************************************/
void doDumpDataBase(void)
{
// variable to remember how many dumps
static int nWhichDump;
// variables for transversing list
// initial header
DUMPSTR("**************************************************************");
DUMPFXN(wsprintf(g.DB,"***** DATA DUMP # %d *****\r\n",++nWhichDump));
DUMPSTR("**************************************************************");
// dump info
DUMPFXN(wsprintf(g.DB, "%lu PROCESSES, %lu THREADS, %lu HANDLES\r\n",
ProcessCount,ThreadCount,FileHandleCount));
DUMPFXN(wsprintf(g.DB, "%lu AvailablePages, %lu CommittedPages, %lu PageFaults\r\n",
A_PageCount,C_PageCount,F_PageCount));
DUMPSTR("**************************************************************");
DUMPSTR("**************************************************************");
return;
}
/***************************************************************************\
* doDumpLGS()
*
* Entry: None
* Exit: Dumps current linegraph info to file "dump.c"
\***************************************************************************/
void doDumpLGS(void)
{
// variable to remember how many dumps
static int nWhichDump;
PLGRAPH plg;
PLGDATA plgd;
// initial header
DUMPSTR("**************************************************************");
DUMPFXN(wsprintf(g.DB,"***** LG DUMP # %d *****\r\n",++nWhichDump));
DUMPSTR("**************************************************************");
for (plg = g.plgList; plg; plg = plg->plgNext)
{
if ((plg != g.plgCPU) && (plg != g.plgProcs) && (plg != g.plgMemory))
continue;
DUMPFXN(wsprintf(g.DB,"LINEGRAPH:::::::: %s\r\n", plg->lpszTitle));
if (plg == g.plg)
DUMPSTR("THIS IS THE CURRENT LINEGRAPH");
DUMPFXN(wsprintf(g.DB,
"RECT: %d %d %d %d, cxGraph: %d\r\n",
plg->rcGraph.left, plg->rcGraph.right, plg->rcGraph.top,
plg->rcGraph.bottom, plg->cxGraph));
DUMPFXN(wsprintf(g.DB,
"RCCALIBRATION: %d %d %d %d, RCLEGEND: %d %d %d %d\r\n",
plg->rcCalibration.left, plg->rcCalibration.right,
plg->rcCalibration.top, plg->rcCalibration.bottom,
plg->rcLegend.left, plg->rcLegend.right,
plg->rcLegend.top, plg->rcLegend.bottom));
DUMPFXN(wsprintf(g.DB,
"cxPerValue: %d, valBottom: %lu, dvalAxisHeight: %lu, dvalCalibration: %lu\r\n",
plg->cxPerValue, plg->valBottom, plg->dvalAxisHeight,
plg->dvalCalibration));
DUMPFXN(wsprintf(g.DB,
"nMaxValues: %d, nDisplayValues: %d, nLines: %d\r\n",
plg->nMaxValues, plg->nDisplayValues, plg->nLines));
DUMPFXN(wsprintf(g.DB,
"iLeftValue: %d, iNewLeftValue: %d, iFirstValue: %d\r\n",
plg->iLeftValue, plg->iNewLeftValue, plg->iFirstValue));
DUMPFXN(wsprintf(g.DB,
"iKnownValue: %d, iDrawnValue: %d\r\n",
plg->iKnownValue, plg->iDrawnValue));
DUMPFXN(wsprintf(g.DB,
"rcCalibRight: %d, rcCalibLeft: %d\r\n",
plg->rcCalibration.right, plg->rcCalibration.left));
// loop throught lines within this LG
for (plgd=plg->plgd; plgd; plgd=plgd->plgdNext)
{
DUMPFXN(wsprintf(g.DB,
" LINE: %s\r\n", plgd->lpszDescription));
if (!plgd->pValues)
DUMPSTR( " ****NO MEMORY ALLOCATED FOR VALUES");
else
DUMPSTR( " **** MEMORY HAS BEEN ALLOCATED");
} // end loop through lgDatas
} // end loop through LGs
return;
}
void doEdgesDump(LPSTR from)
{
PLGRAPH plg;
for (plg = g.plgList; plg; plg = plg->plgNext)
{
if ((plg != g.plgCPU) && (plg != g.plgProcs) && (plg != g.plgMemory))
continue;
DUMPFXN(wsprintf(g.DB,"LINEGRAPH:%s\r\n", plg->lpszTitle));
DUMPSTR(from);
DUMPFXN(wsprintf(g.DB,
"rcCalibRight: %d rcCalibLeft: %d \r\n",
plg->rcCalibration.right, plg->rcCalibration.left));
}
return;
}
void doTimeDump(LARGE_INTEGER ElapsedTime,LARGE_INTEGER DelayTicks,LARGE_INTEGER PercentIdle,int Interval)
{
DUMPFXN(wsprintf(g.DB,"\r\nElapsed high %lu, Elapsed low %lu, Delay Ticks %lu,\r\nPercentIdle %lu, Interval %u.\r\n",
ElapsedTime.HighPart,ElapsedTime.LowPart,DelayTicks.LowPart,PercentIdle.LowPart,Interval));
return;
}
/***************************************************************************\
* doOpenDumpFile()
*
* Entry: None
* Exit: Opens file for dumping debug stuff ("dump.c")
\***************************************************************************/
void doOpenDumpFile(void)
{
hDebugFile = fopen(DUMP_FILE_NAME,"a+");
AssertNotNull(hDebugFile);
return;
}
/***************************************************************************\
* doCloseDumpFile()
*
* Entry: None
* Exit: Opens file for dumping debug stuff ("dump.c")
\***************************************************************************/
void doCloseDumpFile(void)
{
AssertNotNull(hDebugFile);
fclose(hDebugFile);
return;
}
#endif