📄 edkdebug.h
字号:
// --edkdebug.h-----------------------------------------------------------------
//
// Functions to log debugging information in DEBUG builds.
//
// Copyright 1986 - 1998 Microsoft Corporation. All Rights Reserved.
// -----------------------------------------------------------------------------
#if !defined(_EDKDEBUG_H)
#pragma option push -b -a8 -pc -A- /*P_O_Push*/
#define _EDKDEBUG_H
#include <stdio.h>
#include <stdarg.h>
// Default prefix for EDK debug log files. By default, these files
// will be written to the temporary directory. The name and path of the
// log files, can, however, be overriden by setting the EDK_DEBUG_FILE
// environment variable.
#define EDK_LOG_FILE_PREFIX "edk"
#define EDK_LOG_FILE_SUFFIX "log"
//$--DebugLevel-----------------------------------------------------------------
// Available levels of debug.
// -----------------------------------------------------------------------------
typedef enum __DEBUGLEVEL
{
D_PUBLIC = 0, // log interface functions
D_PRIVATE, // log implementation functions
D_ERROR, // log errors
D_WARNING, // log warnings
D_STATUS, // log status
D_ACTION, // log starting/completed action
D_OTHER, // log other information
D_LAST // all debug levels are less than this
} DEBUGLEVEL;
#ifdef __cplusplus
extern "C" {
#endif // __cplusplus
//------------------------------------------------------------------------------
//
// EDKLOG.C Functions
//
//------------------------------------------------------------------------------
//$--_WriteDebugString----------------------------------------------------------
//
// Write a string to the debugger output window.
//
// -----------------------------------------------------------------------------
void _WriteDebugString( // RETURNS: nothing
IN LPSTR lpszFormat, // format string
...); // arguments
//$--_StatusShowAssert----------------------------------------------------------
//
// Status of the assert prompt.
//
// -----------------------------------------------------------------------------
BOOL _StatusShowAssert( // RETURNS: TRUE if assert prompt
void); // no arguments
//$--_StatusDebugFile-----------------------------------------------------------
//
// Status of the debug log file.
//
// -----------------------------------------------------------------------------
BOOL _StatusDebugFile( // RETURNS: nothing
void); // no arguments
//$--_StatusDebugLevel----------------------------------------------------------
//
// Status of the debug level.
//
// -----------------------------------------------------------------------------
BOOL _StatusDebugLevel( // RETURNS: nothing
IN DEBUGLEVEL level); // debug level
//$--_LockDebugFile-------------------------------------------------------------
//
// Lock the debug log file.
//
// -----------------------------------------------------------------------------
void _LockDebugFile( // RETURNS: nothing
void); // no arguments
//$--_UnlockDebugFile-----------------------------------------------------------
//
// Unlock the debug log file.
//
// -----------------------------------------------------------------------------
void _UnlockDebugFile( // RETURNS: nothing
void); // no arguments
//$--_WriteDebugFile------------------------------------------------------------
//
// Write to the debug log file.
//
// -----------------------------------------------------------------------------
void _WriteDebugFile( // RETURNS: nothing
IN LPSTR lpszFormat, // format string
...); // arguments
//$--_InitDebugFile-------------------------------------------------------------
//
// Initialize the debug log file.
//
// -----------------------------------------------------------------------------
void _InitDebugFile( // RETURNS: nothing
void); // no arguments
//------------------------------------------------------------------------------
//
// EDKDEBUG.C Functions
//
//------------------------------------------------------------------------------
//$--_Assert--------------------------------------------------------------------
//
// Write to the debug log file and/or evaluate assertion.
//
// -----------------------------------------------------------------------------
void _Assert( // RETURNS: nothing
IN LPSTR lpszTag, // tag name
IN LPSTR lpszFile, // source file name
IN ULONG ulLine, // source line number
IN DEBUGLEVEL Level, // assertion level
IN BOOL fValue, // assertion value
IN LPSTR lpszFormat, // format string
...); // arguments
//------------------------------------------------------------------------------
//
// MEMORY.C Functions
//
//------------------------------------------------------------------------------
#ifndef _PRIVATE_EDKDEBUG_H
//$--_DebugHeapCheck------------------------------------------------------------
// Writes an entry in the debug log. This function is only called in
// DEBUG builds through the DebugHeapCheck() macro.
// -----------------------------------------------------------------------------
void _DebugHeapCheck( // RETURNS: return code
IN ULONG ulLine, // line number
IN LPSTR lpszFile); // file name
//$--_DebugDumpHeap-------------------------------------------------------------
// Writes an entry in the debug log. This function is only called in
// DEBUG builds through the DebugDumpHeap() macro.
// -----------------------------------------------------------------------------
void _DebugDumpHeap( // RETURNS: nothing
IN ULONG ulLine, // line number
IN LPSTR lpszFile); // file name
//$--EDKDBG_MAPIAllocateBuffer--------------------------------------------------
// Wrapper for MAPIAllocateBuffer().
// -----------------------------------------------------------------------------
SCODE EDKDBG_MAPIAllocateBuffer( // RETURNS: status code
IN ULONG ulLine, // line number
IN LPSTR lpszFile, // file name
IN ULONG ulSize, // size of memory block
OUT LPVOID *lppv); // pointer to memory block address
// variable
//$--EDKDBG_MAPIAllocateMore----------------------------------------------------
// Wrapper for MAPIAllocateMore().
// -----------------------------------------------------------------------------
SCODE EDKDBG_MAPIAllocateMore( // RETURNS: status code
IN ULONG ulLine, // line number
IN LPSTR lpszFile, // file name
IN ULONG ulSize, // size of memory block
IN LPVOID lpvOriginal, // pointer to original memory block
OUT LPVOID *lppvData); // pointer to memory block address
// variable
//$--EDKDBG_MAPIFreeBuffer------------------------------------------------------
// Wrapper for MAPIFreeBuffer().
// -----------------------------------------------------------------------------
SCODE EDKDBG_MAPIFreeBuffer( // RETURNS: status code
IN ULONG ulLine, // line number
IN LPSTR lpszFile, // file name
IN LPVOID lpv); // pointer to memory block
//$--EDKDBG_malloc--------------------------------------------------------------
// Wrapper for malloc().
// -----------------------------------------------------------------------------
LPVOID EDKDBG_malloc( // RETURNS: pointer to memory block
IN ULONG ulLine, // line number
IN LPSTR lpszFile, // file name
IN ULONG ulSize); // size of memory block
//$--EDKDBG_calloc--------------------------------------------------------------
// Wrapper for calloc().
// -----------------------------------------------------------------------------
LPVOID EDKDBG_calloc( // RETURNS: pointer to memory block
IN ULONG ulLine, // line number
IN LPSTR lpszFile, // file name
IN ULONG ulNum, // number of elements
IN ULONG ulSize); // size of element
//$--EDKDBG_realloc-------------------------------------------------------------
// Wrapper for realloc().
// -----------------------------------------------------------------------------
LPVOID EDKDBG_realloc( // RETURNS: pointer to memory block
IN ULONG ulLine, // line number
IN LPSTR lpszFile, // file name
IN LPVOID lpvBlock, // pointer to memory block
IN ULONG ulSize); // new size of memory block
//$--EDKDBG_strdup--------------------------------------------------------------
// Wrapper for strdup().
// -----------------------------------------------------------------------------
char* EDKDBG_strdup( // RETURNS: pointer to allocated string
IN ULONG ulLine, // line number
IN LPSTR lpszFile, // file name
IN const char *lpsz); // pointer to string
//$--EDKDBG_wcsdup--------------------------------------------------------------
// Wrapper for wcsdup().
// -----------------------------------------------------------------------------
wchar_t* EDKDBG_wcsdup( // RETURNS: pointer to allocated string
IN ULONG ulLine, // line number
IN LPSTR lpszFile, // file name
IN const wchar_t *lpsz); // pointer to string
//$--EDKDBG_free----------------------------------------------------------------
// Wrapper for free().
// -----------------------------------------------------------------------------
void EDKDBG_free( // RETURNS: nothing
IN ULONG ulLine, // line number
IN LPSTR lpszFile, // file name
IN LPVOID lpv); // pointer to memory block
//$--EDKDBG_GlobalAlloc---------------------------------------------------------
// Wrapper for GlobalAlloc().
// -----------------------------------------------------------------------------
HGLOBAL EDKDBG_GlobalAlloc( // RETURNS: pointer to memory block
IN ULONG ulLine, // line number
IN LPSTR lpszFile, // file name
IN UINT fuFlags, // allocation flags
IN DWORD dwSize); // size of memory block
//$--EDKDBG_GlobalReAlloc-------------------------------------------------------
// Wrapper for GlobalReAlloc().
// -----------------------------------------------------------------------------
HGLOBAL EDKDBG_GlobalReAlloc( // RETURNS: pointer to memory block
IN ULONG ulLine, // line number
IN LPSTR lpszFile, // file name
IN HGLOBAL hglb, // pointer to memory block
IN DWORD cbBytes, // new size of memory block
IN UINT fuFlags); // allocation flags
//$--EDKDBG_GlobalFree----------------------------------------------------------
// Wrapper for GlobalFree().
// -----------------------------------------------------------------------------
HGLOBAL EDKDBG_GlobalFree( // RETURNS: nothing
IN ULONG ulLine, // line number
IN LPSTR lpszFile, // file name
IN HGLOBAL hglb); // pointer to memory block
//$--EDKDBG_LocalAlloc---------------------------------------------------------
// Wrapper for LocalAlloc().
// -----------------------------------------------------------------------------
HGLOBAL EDKDBG_LocalAlloc( // RETURNS: pointer to memory block
IN ULONG ulLine, // line number
IN LPSTR lpszFile, // file name
IN UINT fuFlags, // allocation flags
IN DWORD dwSize); // size of memory block
//$--EDKDBG_LocalReAlloc-------------------------------------------------------
// Wrapper for LocalReAlloc().
// -----------------------------------------------------------------------------
HGLOBAL EDKDBG_LocalReAlloc( // RETURNS: pointer to memory block
IN ULONG ulLine, // line number
IN LPSTR lpszFile, // file name
IN HLOCAL hgbl, // pointer to memory block
IN DWORD cbBytes, // new size of memory block
IN UINT fuFlags); // allocation flags
//$--EDKDBG_LocalFree----------------------------------------------------------
// Wrapper for LocalFree().
// -----------------------------------------------------------------------------
HGLOBAL EDKDBG_LocalFree( // RETURNS: nothing
IN ULONG ulLine, // line number
IN LPSTR lpszFile, // file name
IN HGLOBAL hgbl); // pointer to memory block
//$--EDKDBG_HrLog---------------------------------------------------------------
// Log an HRESULT (and the last Win32 error) to the debug log.
// -----------------------------------------------------------------------------
HRESULT EDKDBG_HrLog( // RETURNS: HRESULT
IN LPSTR lpszFile, // file name
IN ULONG ulLine, // line number
IN HRESULT hr, // function return code
IN DWORD dwLastError); // last Win32 error
//$--EDKDBG_HrFailed------------------------------------------------------------
// Log an HRESULT (and the last Win32 error) to the debug log.
// -----------------------------------------------------------------------------
BOOL EDKDBG_HrFailed( // RETURNS: HRESULT
IN LPSTR lpszFile, // file name
IN ULONG ulLine, // line number
IN HRESULT hr, // function return code
IN DWORD dwLastError); // last Win32 error
#define _QUOTE(x) # x
#define QUOTE(x) _QUOTE(x)
// Use __FILE__LINE__ as a string containing "File.x(line#)" for example:
// #pragma message( __FILE__LINE__ "Remove this line after testing.")
// The above example will display the file name and line number in the build window
// in such a way as to allow you to double click on it to go to the line.
#define __FILE__LINE__ __FILE__ "(" QUOTE(__LINE__) ") : "
#define TEST_STRING_PTR(x) \
(((x) != NULL) && (!IsBadStringPtr((x), (INFINITE))))
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -