DebugOutputString 功能:发送一个字串到调试器的显示。 函数原型:void WINAPI OutputDebugString( LPCTSTR lpOutputString ); 头文件: 一.最简单的用法 #define MAX_DBG_MSG_LEN (1024) char[MAX_DBG_MSG_LEN]; sprintf(msgbuf, "LastError=%ld\n", GetLastError()); OutputDebugString(msgbuf); 二.扩展的用法 按照printf的风格的对OutputDebugString进行封装 #define MAX_DBG_MSG_LEN (1024) static void __dbg_printf (const char * format,...) { char buf[MAX_DBG_MSG_LEN]; va_list ap; va_start(ap, format); _vsnprintf(buf, sizeof(buf), format, ap); va_end(ap); OutputDebugString(buf); } 使用: __dbg_printf( "LastError=%ld\n", GetLastError()); 三.进一步的扩展 对DEBUG和RELEASE下的区分. ifdef _DEBUG static void __dbg_printf (const char * format,...) { char buf[MAX_DBG_MSG_LEN]; va_list ap; va_start(ap, format); _vsnprintf(buf, sizeof(buf), format, ap); va_end(ap); OutputDebugString(buf); } #else static void __dbg_printf (const char * format,...) {} #endif 顺便说一下宏中对不定参数的使用 Linux下 #define dbg(format, arg...) __dbg_printf(format, ## arg) Windows #define dbg(format, ...) __dbg_printf(format, __VA_ARGS__) 当然有最直接的定义方式 #define dbg __dbg_printf 还有一个应该算比较独特的用法吧 #define PerFormat "[ThreadID @ %08d] " #define dbgex(format, ...) __dbg_printf(PerFormat format, GetCurrentProcessId(), __VA_ARGS__) |
|