2024年4月19日发(作者:)

DebugOutputString

使用

-

雨狼的避难所

-

CSDNBlog

DebugOutputString

功能

:

发送一个字串到调试器的显示。

函数原型

:void WINAPI OutputDebugString( LPCTSTR

lpOutputString );

头文件

:

一. 最简单的用法

#define MAX_DBG_MSG_LEN (1024)

char[MAX_DBG_MSG_LEN];

sprintf(msgbuf, "LastError=%ldn", 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=%ldn", 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, ) __dbg_printf(format, ##

arg)

Windows #define dbg(format, ...) __dbg_printf(format,

__V A_ARGS__)

当然有最直接的定义方式

#define dbg __dbg_printf

还有一个应该算比较独特的

用法吧

#define PerFormat "[ThreadID @ %08d] "

#define dbgex(format, ...) __dbg_printf(PerFormat

format,

GetCurrentProcessId(), __V A_ARGS__)