在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来获得输出。