`
uro494zq
  • 浏览: 16362 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

给Win32 GUI程序调试信息输出方法

 
阅读更多

给Win32 GUI程序调试信息输出方法
2011年09月23日
   DebugView可以追踪TRACE(实际上是Windows函数OutputDebugString)的一个工具.
  ======================================================================
  在Win32的GUI程序中,没有控制台窗口,我们输出调试信息时有些不方便,以往我的做法是使用MessageBox弹出对话框、OutputDebugString向VS的调试窗口输出信息等,但总感觉不如控制台输出几句printf有效率。经过尝试发现GUI程序照样能够拥有(且仅能够拥有一个)控制台窗口,具体做法如下:
  #include
  在程序初始化时,加入以下代码:
  FILE* fpDebugOut = NULL;
  FILE* fpDebugIn   = NULL;
  if( !AllocConsole() ) MessageBox(NULL, _T("控制台生成失败。"), NULL, 0);
  SetConsoleTitle(_T("Debug Window"));
  _tfreopen_s(&fpDebugOut, _T("CONOUT$"),_T("w"), stdout);
  _tfreopen_s(&fpDebugIn, _T("CONIN$"), _T("r"), stdin);
  _tsetlocale(LC_ALL, _T("chs"));     //这是必要的,否则unicode模式下使用C库函数控制台输出不了中文 WriteConsole函数不受影响
  注意AllocConsole可能失败,原因可能是程序已经于一个控制台窗口关联过了,等等。
  程序结束时,加入以下代码:
  fclose(fpDebugOut);
  fclose(fpDebugIn);
  FreeConsole();
  好,现在已经加入了控制台,可以输出字符串了,使用标准的C库函数或者WriteConsole都可以:
  使用WriteConsole的话前面其实不用调用freopen重定向输出流了,直接WriteConsole就行:
  TCHAR str[256];
  DWORD numOfCharWritten = 0;
  _stprintf_s(str, 256, _T("今年是 %d 年\n"), 2008);
  WriteConsole( GetStdHandle(STD_OUTPUT_HANDLE), str, _tcslen(str), &numOfCharWritten, NULL);
  使用C库函数则更简单,但上面一定要调用freopen才有效:
  int tmp = 0;
  _tscanf_s(_T("%d\n"), &tmp);
  _tprintf_s(_T("刚才输入的是 %d\n"), tmp);
  比如在响应WM_PAINT消息时,加入_tprintf_s(_T("重绘 %d 次\n"), ++count),则每次窗口绘制的时候都将输出总重绘次数。
  最后,定义两个宏图省事:
  #define CREATE_DEBUG_CONSOLE \
  FILE* fpDebugOut = NULL; \
  FILE* fpDebugIn = NULL; \
  FILE* fpDebugErr = NULL; \
  if( !AllocConsole() ) \
  MessageBox(NULL, _T("控制台生成失败。"), NULL, 0); \
  SetConsoleTitle(_T("Debug Window")); \
  _tfreopen_s(&fpDebugOut, _T("CONOUT$"),_T("w"), stdout); \
  _tfreopen_s(&fpDebugIn, _T("CONIN$"), _T("r"), stdin); \
  _tfreopen_s(&fpDebugErr, _T("CONOUT$"),_T("w"), stderr); \
  _tsetlocale(LC_ALL, _T("chs"));
  #define RELEASE_DEBUG_CONSOLE \
  fclose(fpDebugOut); \
  fclose(fpDebugIn); \
  fclose(fpDebugErr); \
  FreeConsole();
分享到:
评论

相关推荐

    C++ 基于控制台的Win32程序

    - Win32程序:可以是控制台程序或GUI程序,后者使用窗口、按钮、菜单等图形元素与用户交互。 3. **创建基于控制台的Win32程序** 创建这样的程序,首先需要设置项目配置,确保选择“控制台应用程序”模板。然后,...

    SeggerEval_WIN32_MSVC_GUI_V636.zip,emWin仿真工程

    【SeggerEval_WIN32_MSVC_GUI_V636.zip】是一个包含Segger公司emWin图形用户界面(GUI)的仿真工程,适用于Windows 32位环境,并且使用Microsoft Visual Studio(MSVC)进行编译。这个压缩包是版本6.36的更新,为...

    win32程序中使用console窗口

    本文将深入探讨如何在Win32程序中使用console窗口,以便在开发过程中方便地查看和记录调试信息。 首先,创建一个Win32程序时,默认情况下,如果它是一个控制台应用程序(比如基于C或C++的程序),Windows会自动为它...

    调节背景颜色的win32程序

    1. **Win32 API**:Win32 API是Windows操作系统的核心组件,提供了一系列函数和结构,用于创建图形用户界面(GUI)、处理窗口事件、输入输出、内存管理等。在这个程序中,开发者可能使用了`CreateWindow`、`...

    SeggerEval_WIN32_MSVC_MinGW_GUI_V548

    《SeggerEval_WIN32_MSVC_MinGW_GUI_V548——探索嵌入式图形界面的新高度》 SeggerEval_WIN32_MSVC_MinGW_GUI_V548是一款专为开发者设计的最新版Segger emWin PC模拟器,版本号为V548。这个强大的工具集成了emWin...

    华中科技大学汇编实验win32窗口程序框架

    【华中科技大学汇编实验win32窗口程序框架】是一个针对初学者和进阶者设计的教学资源,旨在帮助学习者理解和掌握使用汇编语言编写Windows操作系统下的图形用户界面(GUI)程序。在这个实验中,你将接触到Win32 API,...

    MFC调用win32窗口显示调试信息

    本文档主要介绍了如何使用Win32 API中的`AllocConsole`函数在MFC程序中创建并利用控制台窗口来显示调试信息,以及相关的API使用方法。 #### 二、`AllocConsole`函数详解 `AllocConsole`函数用于为当前进程分配一个...

    Win32API参考手册中文版

    9. **调试工具**:包括调试信息的获取和调试过程的控制,如OutputDebugString函数可以将字符串输出到调试器。 "Win32 API大全.chm"这个文件是一个帮助文件,通常包含了详细的API函数介绍、参数说明、返回值以及示例...

    Win32 API大全_Win32API_

    Win32 API不仅包括了图形用户界面(GUI)的元素,如窗口、按钮、菜单等,还包括了系统管理、进程与线程控制、内存管理、文件操作、网络通信等多个方面的功能。 1. **系统调用与函数库**:Win32 API是一个庞大的函数...

    Win32画图程序.zip

    Win32画图程序是Windows操作系统中的一个基础图形用户界面(GUI)应用程序,它允许用户进行简单的图像编辑和绘制操作。在这个压缩包中,我们看到了“实验五.sln”、“实验五.v11.suo”以及“实验五”和“Debug”等...

    SeggerEval_WIN32_MSVC_MinGW_GUI_V542.zip

    【SeggerEval_WIN32_MSVC_MinGW_GUI_V542.zip】是一个包含Segger公司开发的emWin图形用户界面库v5.42版本的压缩包,主要用于Windows 32位平台,并且集成了Microsoft Visual C++ (MSVC) 和 MinGW编译环境的支持。...

    Win32 拼图游戏

    Win32应用程序是基于Windows API构建的,它们通常包含消息循环、窗口过程函数以及各种窗口消息的处理。在本项目中,开发者会创建一个主窗口,通过`CreateWindow`或`CreateWindowEx`函数注册窗口类并初始化窗口。 2...

    SeggerEval_WIN32_MSVC_MinGW_GUI_V544.zip

    SeggerEval_WIN32_MSVC_MinGW_GUI_V544.zip是一个包含Segger公司emWin图形用户界面库的5.44版本的压缩包。emWin是一个广泛用于微控制器(MCU)应用的嵌入式GUI库,它提供了丰富的图形功能,支持多种硬件平台和编译...

    c# WIN32控制台应用程序 个人助手

    控制台应用程序意味着它没有图形用户界面(GUI),而是通过文本输入和输出进行交互。 C#是一种面向对象的编程语言,由微软公司开发并广泛应用于Windows平台。它具有丰富的类库和强大的类型系统,支持泛型、匿名方法...

    Win32 API参考手册完全版.zip

    这个压缩包包含了一系列帮助文件和资源,如索引(WIN32.CNT)、快速搜索文件(win32.FTS)、标识文件(win32.GID)、主帮助文件(WIN32.HLP)、关键词文件(WIN32.KWF)以及来源信息文件(www.pudn.com.txt)。...

    win32实现简单计算器

    Visual Studio 2012是一个强大的集成开发环境(IDE),它提供了编写、调试和部署Win32程序所需的所有工具。安装完毕后,你需要创建一个新的Win32 Console Application项目,并选择“空项目”模板,因为我们要从头...

    Win32开发教程(不错的学习资料)

    Win32 API 包含了大量的函数、结构、常量和消息,用于创建图形用户界面(GUI)、处理窗口、输入输出、内存管理、网络通信等多个方面。它支持C和C++语言,使得程序员可以直接调用系统级别的函数,实现高效、低级的...

    Microsoft_Win32_程序员参考大全

    10. **调试和性能优化**:Win32 API提供了一些工具和函数,帮助开发者调试程序,如调试器接口、性能计数器等。了解这些工具能提高开发效率并提升程序性能。 总之,《Microsoft Win32 程序员参考大全》是一本全面...

    微软Win32编程指南(HLP格式)

    `SetLastError`和`GetLastError`用于记录和查询最近的错误代码,`OutputDebugString`则方便在调试过程中输出信息。 综上所述,《微软Win32编程指南》涵盖了Windows平台开发的方方面面,从基础的窗口和消息处理到...

    零基础学VC_基于控制台的Win32程序

    【标题】"零基础学VC_基于控制台的Win32程序" 涵盖了初学者如何从零开始学习Microsoft Visual C++(简称VC)编程,并专注于创建基于控制台的Win32应用程序。这个主题旨在让没有编程背景的人能够理解和掌握C++编程...

Global site tag (gtag.js) - Google Analytics