Files
XBDM/xbdm/imp/xamdbg.h
2025-11-06 15:36:24 -05:00

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__