Win32应用程序开发时输出调试信息

拼搏现实的明天。 2023-06-07 12:19 12阅读 0赞

在学习Windows开发时,我们不免想像控制台开发那样使用printf方便的往控制台输出一些可见的,可以格式化的调试信息。可惜,Windows API并未提供,百度了很久,也没有一个能拷贝过来就能用的方法,主要是传递的参数没有满足OutputDebugString要求的宽字符串指针的类型,在界面编程时,往往我们申明了使用宽字符。

经过在VS2010里用MFC编程的实践,发现直接用TRACE即可,而且第一个参数不要声明宽字符。比如

TRACE(“浮点数是: %g\n”, 12.68);

即可正常显示中文提示。下面的内容只做为存档,供参考学习。

文档路径请查看:https://docs.microsoft.com/zh-cn/windows/win32/api/debugapi/nf-debugapi-outputdebugstringa?redirectedfrom=MSDN

下面的代码可以粘贴到项目中直接使用:

首先引入头文件:

  1. #include <stdio.h>
  2. #include <wtypes.h>
  3. #include <stdarg.h>
  4. #include <tchar.h>

再实现一个函数:

  1. void LogTrace(const wchar_t *pszFormat, ...)
  2. {
  3. va_list pArgs;
  4. wchar_t szMessageBuffer[4096]={0};
  5. va_start( pArgs, pszFormat );
  6. _snwprintf( szMessageBuffer, 4096, pszFormat, pArgs );
  7. va_end( pArgs );
  8. OutputDebugString(szMessageBuffer);
  9. }

使用方法比如:

LogTrace(L”您的得分为: %d,请知晓\n”, 99); // 在VS2010MFC中发现无法正确显示99,而是显示随机数。

上面的方法我在MFC编程时发现不管用,主要是浮点数不能正确解析,所以用了下面的方法:

将如下代码放到某个公共的.h头文件中,即可在程序中使用。

  1. #ifdef _DEBUG
  2. #define CONSOLELOG OutputDebugString
  3. #else
  4. #define CONSOLELOG __noop // afx.h中如果没定义_DEBUG,TRACE就定义为__noop从而在Release配置下不会产生影响
  5. #endif

用法如下:

  1. CString csTheNumber;
  2. csTheNumber.Format(_T("1现在是: %g\n"), 3.256);
  3. CONSOLELOG(csTheNumber);

发表评论

表情:
评论列表 (有 0 条评论,12人围观)

还没有评论,来说两句吧...

相关阅读

    相关 win32 api 串口程序

      之前也用过vs(visual studio),但是vs比较大,一般也不做专业的软件开发,但可能做一些小程序来辅助我们的工作,还对学习c语言时使用的vc++ 6.0开法环境钟

    相关 win32学习06.控制台调试

    如果用Linux和DOS程序写C语言,写的时候断点调试,运行的时候使用输出调试,窗口程序下一般会使用写日志调试。如果我们依然希望使用输出调试也是可以的。 HANDLE