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

解决方案 »

  1.   

    回答过一次了,是TRACE。
      

  2.   

    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函数。