MFC调试及运行状态下打印输出信息

使用C++进行MFC程序调试时,有时我们需要查看某个变量的实时值,或者需要查看程序此时的运行状态。那么就需要输出某些调试信息,方便跟踪变量及了解程序的与运行状态。但是直接使用printf是无法输出信息的,下面介绍一下这两种下如何输出调试信息。
1.MFC调试(F5)状态下输出调试信息:
直接使用TRACE()

例如:
在这里插入图片描述
设置断点,直接按下[F5],单步运行,同时观察调试窗口的输出(可以先把窗口清空以便观察),输出结果如图:
在这里插入图片描述
这就是在Debug调试模式下的输出,

注意:TRACE在直接运行下无法输出,只有调试模式下才可以输出。
2.MFC运行状态(Ctrl+F5)下打印输出信息:
使用printf()输出,但有个前提:需要在输出信息前写上两个语句:

AllocConsole();
// 为当前的窗口程序申请一个Console窗口 返回非零值:调用成功,返 回0,不成功
freopen(“CONOUT$”, “w”, stdout);

// 重新分配文件指针,以实现重定向。可重定向的流有:标准输入流、标准输出流或者标准错误流。
其中"CONOUT$"是指代当前console的特殊字符串,"w"表明以written模式打开这个console,stdout指代标准输出流。

运行后就会打开一个cmd窗口,然后就可以正常使用printf()输出信息
可以在初始化函数OnInitDialog()处调用一次,然后在需要输出的地方直接输出即可。

以下是一个完整的例子:
在这里插入图片描述
各个按钮的函数:

//显示调试信息:重定向
void CCPrintDlg::OnBtnshowprint() 
{
	PrintMessage();
}


//开始状态按钮
void CCPrintDlg::OnBtnstart() 
{
	
	printf("Start\n");
	
}
//结束状态按钮
void CCPrintDlg::OnBtnstop() 
{
	printf("Stop\n");
	
}

//辅组:清除屏幕按钮
void CCPrintDlg::OnBtnclear() 
{
	system("cls");
	
}


//设定窗口位置:宽高
void CCPrintDlg::OnSetSize() 
{
	//AllocConsole函数不能改变控制台窗口在屏幕上的位置、尺寸等属性。
	//可以用SetConsoleWindowInfo来改变控制台窗口大小

	using namespace std;
    HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
    SMALL_RECT rc;
    rc.Left = 5;
    rc.Top = 5;
    rc.Right = 54;
    rc.Bottom = 24;
   
    SetConsoleWindowInfo(hOut, TRUE, &rc);//此时窗口的宽度为50,高度为20

 }
//显示调试信息具体实现:重定向
void CCPrintDlg::PrintMessage()
{
	
	AllocConsole();                   //AllocConsole函数的功能是为当前的窗口程序申请一个Console窗口  返回非零值:调用成功,返回0,调用不成功
	freopen("CONOUT$", "w", stdout);  // freopen函数用来替换一个流,或者说重新分配文件指针,以实现重定向。可重定向的流有:标准输入流、标准输出流或者标准错误流。
								      //FILE *freopen(const char *path, const char *mode, FILE *stream);
								      //其中"CONOUT$"是指代当前console的特殊字符串,"w"表明以written模式打开这个console,stdout指代标准输出流。
	
	std::cout << "调试输出窗口已打开" << std::endl;
	
}

运行结果:
在这里插入图片描述

说明:1.能够输出信息的前提就是先按下第一个按钮:显示调试信息,重定向后才能输出,否则printf()无效无法输出。

2.在初始化函数OnInitDialog()处调用一次PrintMessage(),然后在需要输出的地方直接输出即可。程序运行后直接调出Console窗口。

在这里插入图片描述

结语:谢谢!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

随心漂流

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值