|
|
/*++
Copyright (c) 1998 Microsoft Corporation
Module Name:
trace.cpp
Abstract:
SIS Groveler debugging tracer
Authors:
John Douceur, 1998
Environment:
User Mode
Revision History:
--*/
#include "all.hxx"
#if TRACE_TYPE > 0
#ifndef TRACE_MAIN
#define TRACE_MAIN 0
#endif /* TRACE_MAIN */
#ifndef TRACE_CENTCTRL
#define TRACE_CENTCTRL 0
#endif /* TRACE_CENTCTRL */
#ifndef TRACE_CONFEST
#define TRACE_CONFEST 0
#endif /* TRACE_CONFEST */
#ifndef TRACE_DATABASE
#define TRACE_DATABASE 0
#endif /* TRACE_DATABASE */
#ifndef TRACE_DECAYACC
#define TRACE_DECAYACC 0
#endif /* TRACE_DECAYACC */
#ifndef TRACE_DISKINFO
#define TRACE_DISKINFO 0
#endif /* TRACE_DISKINFO */
#ifndef TRACE_ETIMER
#define TRACE_ETIMER 0
#endif /* TRACE_ETIMER */
#ifndef TRACE_EVENT
#define TRACE_EVENT 0
#endif /* TRACE_EVENT */
#ifndef TRACE_EVENTLOG
#define TRACE_EVENTLOG 0
#endif /* TRACE_EVENTLOG */
#ifndef TRACE_EXTRACT
#define TRACE_EXTRACT 0
#endif /* TRACE_EXTRACT */
#ifndef TRACE_FILTER
#define TRACE_FILTER 0
#endif /* TRACE_FILTER */
#ifndef TRACE_GROVELER
#define TRACE_GROVELER 0
#endif /* TRACE_GROVELER */
#ifndef TRACE_MEANCOMP
#define TRACE_MEANCOMP 0
#endif /* TRACE_MEANCOMP */
#ifndef TRACE_MUTEX
#define TRACE_MUTEX 0
#endif /* TRACE_MUTEX */
#ifndef TRACE_PARAMS
#define TRACE_PARAMS 0
#endif /* TRACE_PARAMS */
#ifndef TRACE_PARTCTRL
#define TRACE_PARTCTRL 0
#endif /* TRACE_PARTCTRL */
#ifndef TRACE_PATHLIST
#define TRACE_PATHLIST 0
#endif /* TRACE_PATHLIST */
#ifndef TRACE_PEAKFIND
#define TRACE_PEAKFIND 0
#endif /* TRACE_PEAKFIND */
#ifndef TRACE_REGISTRY
#define TRACE_REGISTRY 0
#endif /* TRACE_REGISTRY */
#ifndef TRACE_SCAN
#define TRACE_SCAN 0
#endif /* TRACE_SCAN */
#ifndef TRACE_SERVICE
#define TRACE_SERVICE 0
#endif /* TRACE_SERVICE */
#ifndef TRACE_SHARE
#define TRACE_SHARE 0
#endif /* TRACE_SHARE */
#ifndef TRACE_SISDRIVE
#define TRACE_SISDRIVE 0
#endif /* TRACE_SISDRIVE */
#ifndef TRACE_UTILITY
#define TRACE_UTILITY 0
#endif /* TRACE_UTILITY */
int trace_detail[num_trace_components] = { TRACE_MAIN, TRACE_CENTCTRL, TRACE_CONFEST, TRACE_DATABASE, TRACE_DECAYACC, TRACE_DISKINFO, TRACE_ETIMER, TRACE_EVENT, TRACE_EVENTLOG, TRACE_EXTRACT, TRACE_FILTER, TRACE_GROVELER, TRACE_MEANCOMP, TRACE_MUTEX, TRACE_PARAMS, TRACE_PARTCTRL, TRACE_PATHLIST, TRACE_PEAKFIND, TRACE_REGISTRY, TRACE_SCAN, TRACE_SERVICE, TRACE_SHARE, TRACE_SISDRIVE, TRACE_UTILITY };
#if TRACE_TYPE == 1
int Tracer::position = trace_buffer_size; Tracer::TraceBuffer * Tracer::trace_log = 0; Tracer::TraceBuffer * Tracer::current_buffer = 0; Tracer::TraceBuffer * Tracer::free_list = 0;
#endif // TRACE_TYPE == 1
#ifdef TRACE_FILENAME
FILE * Tracer::file_stream = 0;
#endif /* TRACE_FILENAME */
#if TRACE_IOSTREAM == 1
FILE * Tracer::io_stream = stdout;
#elif TRACE_IOSTREAM != 0
FILE * Tracer::io_stream = stderr;
#endif // TRACE_IOSTREAM
void Tracer::trace_printf( _TCHAR *format, ...) { ASSERT(format != 0); #if TRACE_TYPE == 1
if (position >= trace_buffer_size - trace_entry_limit) { TraceBuffer *new_buffer; if (free_list == 0) { new_buffer = new TraceBuffer; } else { new_buffer = free_list; free_list = free_list->next; } ASSERT(new_buffer != 0); new_buffer->next = 0; if (current_buffer == 0) { trace_log = new_buffer; } else { current_buffer->next = new_buffer; } current_buffer = new_buffer; position = 0; } ASSERT(current_buffer != 0); va_list ap; va_start(ap, format); int result = _vsntprintf(¤t_buffer->buffer[position], trace_entry_limit, format, ap); va_end(ap); if (result >= trace_entry_limit || result < 0) { position += trace_entry_limit; _tcscpy(¤t_buffer->buffer[position - 4], _T("...\n")); } else { position += result; } ASSERT(position < trace_buffer_size); #else // TRACE_TYPE == 1
va_list ap; #ifdef TRACE_FILENAME
if (file_stream != 0) { va_start(ap, format); _vftprintf(file_stream, format, ap); va_end(ap); } #endif /* TRACE_FILENAME */
#if TRACE_IOSTREAM != 0
va_start(ap, format); _vftprintf(io_stream, format, ap); va_end(ap); #endif // TRACE_IOSTREAM != 0
#endif // TRACE_TYPE == 1
}
#if TRACE_TYPE == 1
void Tracer::print_trace_log() { TraceBuffer *buffer = trace_log; while (buffer != 0) { #ifdef TRACE_FILENAME
if (file_stream != 0) { _ftprintf(file_stream, _T("%s"), buffer->buffer); } #endif /* TRACE_FILENAME */
#if TRACE_IOSTREAM != 0
ASSERT(io_stream != 0); _ftprintf(io_stream, _T("%s"), buffer->buffer); #endif // TRACE_IOSTREAM != 0
TraceBuffer *next_buffer = buffer->next; buffer->next = free_list; free_list = buffer; buffer = next_buffer; } trace_log = 0; current_buffer = 0; position = 0; }
#endif // TRACE_TYPE == 1
#ifdef TRACE_FILENAME
void Tracer::open_trace_file() { file_stream = _tfopen(_T(TRACE_FILENAME), _T("w")); if (file_stream == 0) { PRINT_DEBUG_MSG((_T("GROVELER: Unable to open trace file ") _T(TRACE_FILENAME))); } }
void Tracer::close_trace_file() { if (file_stream != 0) { fclose(file_stream); } }
#endif /* TRACE_FILENAME */
#endif // TRACE_TYPE > 0
|