241 lines
7.6 KiB
C
241 lines
7.6 KiB
C
/*++
|
|
|
|
Copyright (c) Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
xamdbg.h
|
|
|
|
Abstract:
|
|
|
|
This module defines the debug and logging APIs used by XAM applications
|
|
|
|
--*/
|
|
|
|
#include <stdarg.h>
|
|
#include <stdio.h>
|
|
|
|
#ifndef __XAMDBG_H__
|
|
#define __XAMDBG_H__
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#if DBG
|
|
#define XAM_FEATURE_ASSERT 1
|
|
#define XAM_FEATURE_TRACE 1
|
|
#else // DBG
|
|
#define XAM_FEATURE_ASSERT 0
|
|
#define XAM_FEATURE_TRACE 0
|
|
#endif // !DBG
|
|
|
|
//
|
|
// XAM debug flags enable granular control over the debug output made by
|
|
// applications
|
|
//
|
|
|
|
#define XAMDBG_PRINT_LEVEL_MASK 0x0000000F
|
|
#define XAMDBG_BREAK_LEVEL_MASK 0x000000F0
|
|
#define XAMDBG_FLAG_ENABLED 0x00000100
|
|
|
|
#define XAMDBG_PRINT_LEVEL_SHIFT 0
|
|
#define XAMDBG_BREAK_LEVEL_SHIFT 4
|
|
|
|
#define XAMDBG_LEVEL_TRACE XDBG_TRACE
|
|
#define XAMDBG_LEVEL_WARNING XDBG_WARNING
|
|
#define XAMDBG_LEVEL_ERROR XDBG_ERROR
|
|
|
|
#define XAMDBG_TAG(P, B, F) ((P << XAMDBG_PRINT_LEVEL_SHIFT) | (B << XAMDBG_BREAK_LEVEL_SHIFT) | F)
|
|
#define XAMDBG_TAG_PRINT_LEVEL(X) ((X & XAMDBG_PRINT_LEVEL_MASK) >> XAMDBG_PRINT_LEVEL_SHIFT)
|
|
#define XAMDBG_TAG_BREAK_LEVEL(X) ((X & XAMDBG_BREAK_LEVEL_MASK) >> XAMDBG_BREAK_LEVEL_SHIFT)
|
|
|
|
//
|
|
// Inline breakpoint
|
|
//
|
|
|
|
#ifndef DbgBreak
|
|
#ifdef XAM_FEATURE_ASSERT
|
|
#define XamDbgBreak() __debugbreak()
|
|
#else
|
|
#define XamDbgBreak()
|
|
#endif
|
|
#endif
|
|
|
|
//
|
|
// The print macro is used by other macros to wrap XamDbgPrint
|
|
//
|
|
|
|
#if !defined(_PREFAST_)
|
|
|
|
#if XAM_FEATURE_TRACE
|
|
#define XAMPRINT(b, lvl, sz, ...) do { BOOL f = XamDbgPrint(lvl, sz, ##__VA_ARGS__); if(f && b) { XamDbgBreak(); } } while (0);
|
|
#else // XAM_FEATURE_TRACE
|
|
#define XAMPRINT(b, lvl, sz, ...)
|
|
#endif // !XAM_FEATURE_TRACE
|
|
|
|
#else // _PREFAST_
|
|
|
|
#define XAMPRINT(b, lvl, sz)
|
|
#define XAMPRINT(b, lvl, sz, a1)
|
|
#define XAMPRINT(b, lvl, sz, a1, a2)
|
|
#define XAMPRINT(b, lvl, sz, a1, a2, a3)
|
|
#define XAMPRINT(b, lvl, sz, a1, a2, a3, a4)
|
|
#define XAMPRINT(b, lvl, sz, a1, a2, a3, a4, a5)
|
|
#define XAMPRINT(b, lvl, sz, a1, a2, a3, a4, a5, a6)
|
|
#define XAMPRINT(b, lvl, sz, a1, a2, a3, a4, a5, a6, a7)
|
|
#define XAMPRINT(b, lvl, sz, a1, a2, a3, a4, a5, a6, a7, a8)
|
|
#define XAMPRINT(b, lvl, sz, a1, a2, a3, a4, a5, a6, a7, a8, a9)
|
|
#define XAMPRINT(b, lvl, sz, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10)
|
|
|
|
#endif // _PREFAST_
|
|
|
|
//
|
|
// Trace macros print out a debug message if the system app's debug level is
|
|
// sufficiently low
|
|
//
|
|
|
|
#if !defined(_PREFAST_)
|
|
|
|
#if XAM_FEATURE_TRACE
|
|
#define XAMTRCLINE() do { XAMPRINT(TRUE, XDBG_TRACE, __FILE__ " @ " __LINE__ "\n"); } while(0)
|
|
#define XAMTRC(tag, sz, ...) do { XAMPRINT(TRUE, XDBG_TRACE, sz, ##__VA_ARGS__); } while(0);
|
|
#define XAMWRN(tag, sz, ...) do { XAMPRINT(TRUE, XDBG_WARNING, sz, ##__VA_ARGS__); } while(0);
|
|
#define XAMERR(tag, sz, ...) do { XAMPRINT(TRUE, XDBG_ERROR, sz, ##__VA_ARGS__); } while(0);
|
|
#else // XAM_FEATURE_TRACE
|
|
#define XAMTRCLINE()
|
|
#define XAMTRC(tag, sz, ...)
|
|
#define XAMWRN(tag, sz, ...)
|
|
#define XAMERR(tag, sz, ...)
|
|
#endif // !XAM_FEATURE_TRACE
|
|
|
|
#else // _PREFAST_
|
|
|
|
#define XAMTRC(tag, sz)
|
|
#define XAMTRC(tag, sz, a1)
|
|
#define XAMTRC(tag, sz, a1, a2)
|
|
#define XAMTRC(tag, sz, a1, a2, a3)
|
|
#define XAMTRC(tag, sz, a1, a2, a3, a4)
|
|
#define XAMTRC(tag, sz, a1, a2, a3, a4, a5)
|
|
#define XAMTRC(tag, sz, a1, a2, a3, a4, a5, a6)
|
|
#define XAMTRC(tag, sz, a1, a2, a3, a4, a5, a6, a7)
|
|
#define XAMTRC(tag, sz, a1, a2, a3, a4, a5, a6, a7, a8)
|
|
#define XAMTRC(tag, sz, a1, a2, a3, a4, a5, a6, a7, a8, a9)
|
|
#define XAMTRC(tag, sz, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10)
|
|
|
|
#define XAMWRN(tag, sz)
|
|
#define XAMWRN(tag, sz, a1)
|
|
#define XAMWRN(tag, sz, a1, a2)
|
|
#define XAMWRN(tag, sz, a1, a2, a3)
|
|
#define XAMWRN(tag, sz, a1, a2, a3, a4)
|
|
#define XAMWRN(tag, sz, a1, a2, a3, a4, a5)
|
|
#define XAMWRN(tag, sz, a1, a2, a3, a4, a5, a6)
|
|
#define XAMWRN(tag, sz, a1, a2, a3, a4, a5, a6, a7)
|
|
#define XAMWRN(tag, sz, a1, a2, a3, a4, a5, a6, a7, a8)
|
|
#define XAMWRN(tag, sz, a1, a2, a3, a4, a5, a6, a7, a8, a9)
|
|
#define XAMWRN(tag, sz, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10)
|
|
|
|
#define XAMERR(tag, sz)
|
|
#define XAMERR(tag, sz, a1)
|
|
#define XAMERR(tag, sz, a1, a2)
|
|
#define XAMERR(tag, sz, a1, a2, a3)
|
|
#define XAMERR(tag, sz, a1, a2, a3, a4)
|
|
#define XAMERR(tag, sz, a1, a2, a3, a4, a5)
|
|
#define XAMERR(tag, sz, a1, a2, a3, a4, a5, a6)
|
|
#define XAMERR(tag, sz, a1, a2, a3, a4, a5, a6, a7)
|
|
#define XAMERR(tag, sz, a1, a2, a3, a4, a5, a6, a7, a8)
|
|
#define XAMERR(tag, sz, a1, a2, a3, a4, a5, a6, a7, a8, a9)
|
|
#define XAMERR(tag, sz, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10)
|
|
|
|
#endif // _PREFAST_
|
|
|
|
//
|
|
// Traps causes a debugger to be broken into
|
|
//
|
|
|
|
#if !defined(_PREFAST_)
|
|
|
|
#if XAM_FEATURE_ASSERT
|
|
#define XAMTRAPLINE() do { XAMPRINT(FALSE, XDBG_TRACE, __FILE__ " @ " __LINE__ "\n"); DbgBreak(); } while(0);
|
|
#define XAMTRAP(sz, ...) do { XAMPRINT(FALSE, XDBG_TRACE, sz, ##__VA_ARGS__); } while(0);
|
|
#else // XAM_FEATURE_ASSERT
|
|
#define XAMTRAPLINE()
|
|
#define XAMTRAP(sz, ...)
|
|
#endif // !XAM_FEATURE_ASSERT
|
|
|
|
#else // _PREFAST_
|
|
|
|
#define XAMTRAP(sz)
|
|
#define XAMTRAP(sz, a1)
|
|
#define XAMTRAP(sz, a1, a2)
|
|
#define XAMTRAP(sz, a1, a2, a3)
|
|
#define XAMTRAP(sz, a1, a2, a3, a4)
|
|
#define XAMTRAP(sz, a1, a2, a3, a4, a5)
|
|
#define XAMTRAP(sz, a1, a2, a3, a4, a5, a6)
|
|
#define XAMTRAP(sz, a1, a2, a3, a4, a5, a6, a7)
|
|
#define XAMTRAP(sz, a1, a2, a3, a4, a5, a6, a7, a8)
|
|
#define XAMTRAP(sz, a1, a2, a3, a4, a5, a6, a7, a8, a9)
|
|
#define XAMTRAP(sz, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10)
|
|
|
|
#endif // _PREFAST_
|
|
|
|
//
|
|
// Compatibility with prior XAM debug instrumentation
|
|
//
|
|
|
|
#define TraceSz0 XAMTRC
|
|
#define TraceSz1 XAMTRC
|
|
#define TraceSz2 XAMTRC
|
|
#define TraceSz3 XAMTRC
|
|
#define TraceSz4 XAMTRC
|
|
#define TraceSz5 XAMTRC
|
|
#define TraceSz6 XAMTRC
|
|
#define TraceSz7 XAMTRC
|
|
#define TraceSz8 XAMTRC
|
|
#define TraceSz9 XAMTRC
|
|
#define TraceSz10 XAMTRC
|
|
|
|
#define WarnSz0 XAMWRN
|
|
#define WarnSz1 XAMWRN
|
|
#define WarnSz2 XAMWRN
|
|
#define WarnSz3 XAMWRN
|
|
#define WarnSz4 XAMWRN
|
|
#define WarnSz5 XAMWRN
|
|
#define WarnSz6 XAMWRN
|
|
#define WarnSz7 XAMWRN
|
|
#define WarnSz8 XAMWRN
|
|
#define WarnSz9 XAMWRN
|
|
#define WarnSz10 XAMWRN
|
|
|
|
#define ErrorSz0 XAMERR
|
|
#define ErrorSz1 XAMERR
|
|
#define ErrorSz2 XAMERR
|
|
#define ErrorSz3 XAMERR
|
|
#define ErrorSz4 XAMERR
|
|
#define ErrorSz5 XAMERR
|
|
#define ErrorSz6 XAMERR
|
|
#define ErrorSz7 XAMERR
|
|
#define ErrorSz8 XAMERR
|
|
#define ErrorSz9 XAMERR
|
|
#define ErrorSz10 XAMERR
|
|
|
|
#define TrapSz0 XAMTRAP
|
|
#define TrapSz1 XAMTRAP
|
|
#define TrapSz2 XAMTRAP
|
|
#define TrapSz3 XAMTRAP
|
|
#define TrapSz4 XAMTRAP
|
|
#define TrapSz5 XAMTRAP
|
|
#define TrapSz6 XAMTRAP
|
|
#define TrapSz7 XAMTRAP
|
|
#define TrapSz8 XAMTRAP
|
|
#define TrapSz9 XAMTRAP
|
|
#define TrapSz10 XAMTRAP
|
|
|
|
#define Assert NT_ASSERT
|
|
|
|
#ifdef __cplusplus
|
|
};
|
|
#endif
|
|
|
|
#endif // __XAMDBG_H__
|