MFC工程使用控制台输出调试信息

  在MFC程序中,可以使用TRACE宏或者OutPutDebugString()函数输出调试信息,TRACE宏可以在调试时像Output窗口输出调试信息,OutPutDebugString()函数的输出则可以用DebugView捕获(DebugView也可以捕获TRACE宏的输出,其官网在 这里 ,具体使用请参考官网的说明),另外也可以通过AfxMessageBox()或者MessageBox()弹窗输出,但毕竟太多繁琐,每弹出一个窗口便要确认一次。引入日志库也是个好办法,同时也可以通过分析日志文件了解应用程序的运行状况,这是终极大杀器,我们还需要更轻量级的方法。

  控制台调试信息输出,即是在程序运行时,打开一个Console窗口,将自己编写的调试信息输出到Console中,便于了解当前程序的运行状况,帮助调试,仅需简单几行代码即可搞定。

  本文以一个基于对话框的MFC程序为例,看看如何给应用程序加上控制台输出。

  1、实例工程名为Demo,在CDemoDlg.cpp中加入头文件 #include "conio.h" 

  2、在CDemoDlg::OnInitDialog() {...}函数中加入AllocConsole();

  3、在需要输出调试信息的地方,调用 cprintf() (在VS2005后应该用 _cprintf 代替,下文有说明)函数输出信息,用法同 printf() 函数类似;

  4、若需要关闭控制台输出,调用 FreeConsole();


方法一:
WINDOWS为你提供了一系列的API来完成这个功能,例如:ReadConsole,WriteConsole等,具体参见MSDN。 

1。首先调用AllocConsole函数来为你进程创建一个Console,该API是将当前进程Attache到一个新创建的Console上。你还可以通过调用SetConsoleTitle(tstrName);来设置Console的Title.

2。使用WriteConsoleOutput来将信息输出到Console上;在输出之前,先要得到Console的HANDLE,这通过 GetStdHandle(STD_OUTPUT_HANDLE)来得到,然后将信息组织成Console的格式,然后输出。

3。关闭CONSOLE。当不需要这个CONSOLE的时候,调用FreeConsole来将当前进程从Console中Detach中。 

4。通过创建一个进程来为监视你的CONSOLE输入和输出;你可以创建一个线程然后来,在线程中取得标准输入和输出CONSOLE的HANDLE,然后循环监视其事件,再对不同的事件进行处理。

方法二: 
在 Project | Setting...中,选项 Post-builder step 里新建command, 输入: 
editbin /SUBSYSTEM:CONSOLE $(OUTDIR)\filename.exe 
(其中 filename 为可执行文件名) 
则可以使用 printf 或者 std::cout 在控制台中输出了。例如你的可执行文件名为 HelloWorld.exe,则你新建的 command 就为 

editbin   /SUBSYSTEM:CONSOLE   $(OUTDIR)\HelloWorld.exe 

方法三:

就用TRACE,然后编译debug的工程,直接运行你的可执行文件,可以用Dbgview来获得输出。

 

猜你喜欢

转载自blog.csdn.net/u012308586/article/details/89966366
今日推荐