简单问题 什么函数能从debug窗口打印数据?

zdk 2003-03-05 04:19:11
什么函数能从debug窗口打印数据?
...全文
28 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
wpmsoft 2003-03-05
  • 打赏
  • 举报
回复
回答过两次了,是TRACE。

1、基本概念

跟踪语句(trace statements)可使程序执行,并使程序员可对可变值进行查看。它们提供了一个用于观察的程序,并且独立于一个交互式的调试器,但是最具有特色的是它们常用于对调试器提供的信息进行补充。在VC中,跟踪消息通常输出到输出窗口中的Debug标签,也可以重新输出到一个文件中。跟踪语句的特性如下:

.跟踪语句用于报告代码中重要的运行事件。

.跟踪语句的编译通常是有条件的,并只存在于调试版本中,而在发布版本中不被编译。

.跟踪语句不能包含程序代码或对程序代码有间接的影响作用。

.跟踪语句的目的是向程序员提供信息,而不是向用户。

跟踪语句也是调试语句,它可以执行程序,并且在运行中程序员可以查看变量。跟踪语句对于那些使用交互式调试器很难调试的程序是很有效的。

跟踪语句和断言的区别如下:

.跟踪语句是无条件的,断言是有条件的布尔语句。

.跟踪语句用于显示程序执行和变量值,不直接显示bug,断言用于显示出bug。

.跟踪语句将信息输出到调试窗口或文件中,可被随意地忽略,断言打断程序的执行。

2、MFC中的跟踪语句

在MFC中,你可以使用TRACE和AfxOutputDebugString宏、CObject::Dump虚拟函数和AfxDumpStack函数。TRACE宏由AfxDump实现,AfxDump由AfxOutputDebugString实现。AfxOutputDebugString宏和AfxDumpStack函数可以在所有版本中编译,其他只能在调试版本中编译。

(1)TRACE宏有以下形式:

_TRACE(reportType,format);

_TRACE0(reportType,format,arg1);

_TRACE1(reportType,format,arg1,arg2);

_TRACE2(reportType,format,arg1,arg2,arg3);

_TRACE3(reportType,format,arg1,arg2,arg3,arg4);

在MFC中,推荐使用TRACEn宏,当使用TRACE宏时需要使用_T宏来格式化参数以正确解决Unicode的校正,而TRACEn不需要。

MFC TRACE宏中的一个缺点是AfxTrace函数使用一个512字符固定大小的缓冲区,这使得它在跟踪长字符串时是无用的。

(2)CObject::Dump

CObject类有一个转储(dump)虚拟函数,所有继承CObject的类都可以通过重载这个函数,输出它们的值。

3、Visual C++消息Pragma

消息Pragma实际上是一个编译时的跟踪语句,你可以使用它来警告在预处理过程中发现的潜在的编连(build)问题。典型的例子:

#if (WINVER>=0x0500)

#pragma message (“NOTE:WINVER has been defined as 0x0500 or greater.”)

#endif

消息Pragma是非常有用的,尤其是在复杂编连中。然而,如果你要检测一种特定的问题,而不是潜在的问题,使用#error预处理来代替打断编译会更直接一些。

每当你的程序中有错误而你想得到更多信息的时候,你应该去查看一下跟踪消息。由于VC输出窗口的缓冲区是有大小限制的,因此如果跟踪消息数据产生的速度超过输出窗口处理的速度,那么消息会塞满缓冲区,导致数据丢失。避免这个问题的简单方法是在输出大量数据的代码段如转储对象时,调用Sleep API函数。

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧