vc++ 调试信息输出 打印调试信息 .

1.CDumpContext

该类没有基类。
这个类支持面向流的诊断输出,以人能够阅读的文本。
该类重载了<<操作符。

afxDump是一个预声明的CDumpContext对象,可以方便使用。
该对象只在MFC的Debug版中有效。
可以将调式信息输出到调试输出窗口或调试终端。

// example for afxDump
CPerson myPerson = new CPerson;
// set some fields of the CPerson object...
//..
// now dump the contents
#ifdef _DEBUG
afxDump << "Dumping myPerson:/n";
myPerson->Dump( afxDump );
afxDump << "/n";
#endif

如果想建立一个制定的输出,比如一个制定的errlog文件。
我们可以自己生成一个CDumpContext对象。
方法如下:

CFile f;
if( !f.Open( "dump.txt", CFile::modeCreate | CFile::modeWrite ) ) {
   afxDump << "Unable to open file" << "/n";
   exit( 1 );
}
CDumpContext dc( &f );

2.TRACE

这个宏可以在DEBUG过程中,方便的跟踪程序中的变量的值。
在Debug环境中,TRACE宏输出到afxDump对象中。
在Release环境中,它不起作用。
TRACE一次限制512个字符,包括结束的NULL字符。
如果超过将引发ASSERT。

例:
int i = 1;
char sz[] = "one";
TRACE( "Integer = %d, String = %s/n", i, sz );
// Output: 'Integer = 1, String = one'

同时,还有TRACE0,TRACE1,TRACE2,TRACE3等宏。
数字代表宏中的参数数。

// example for TRACE0
TRACE0( "Start Dump of MyClass members:" );

// example for TRACE1
int i = 1;
TRACE1( "Integer = %d/n", i );
// Output: 'Integer = 1'

// example for TRACE2
int i = 1;
char sz[] = "one";
TRACE2( "Integer = %d, String = %s/n", i, sz );
// Output: 'Integer = 1, String = one'

3.void AfxDump( const CObject* pOb )
该函数调用对象的Dump成员函数,将信息输出到afxDump制定的位置。
最好不要在程序中调用该函数,而使用对象的Dump函数。

4.virtual void Dump( CDumpContext& dc ) const;
是CObjec的成员函数,将对象的内容输出到一个CDumpContext对象。
写自定义类的时候,应该重写Dump函数,来提供诊断服务。
重写的Dump函数中一般会先调用基类的Dump函数,后输出数据成员。
CObject::Dump输出类名,如果你的类用了IMPLEMENT_DYNAMIC或IMPLEMENT_SERIAL宏。
例:

class CPerson : public CObject
{
public:
//声明
#ifdef _DEBUG
    virtual void Dump( CDumpContext& dc ) const;
#endif

    CString m_firstName;
    CString m_lastName;
    // etc. ...
};
//实现
#ifdef _DEBUG
void CPerson::Dump( CDumpContext& dc ) const
{
    // call base class function first
    CObject::Dump( dc );

    // now do the stuff for our specific class
    dc << "last name: " << m_lastName << "/n"
        << "first name: " << m_firstName << "/n";
}
#endif

//调用
CPerson person;
#ifdef _DEBUG
CFile f;
if( !f.Open( "c://dump.txt", CFile::modeCreate | CFile::modeWrite ) ) {
   afxDump << "Unable to open file" << "/n";
   exit( 1 );
}
CDumpContext dc( &f );

person.Dump(dc);
dc<<"test dump output";
#endif

在较复杂的程序中,我们可以采用上述方法,

在调试程序的过程中,输出自己想要的数据和信息。

还是较为方便和简单的方法的。

 

from:http://blog.csdn.net/aisq2008/article/details/6220330

时间: 2024-11-08 20:54:55

vc++ 调试信息输出 打印调试信息 .的相关文章

关于调试时输出的字符串信息

使用工具:VC6.0,IDA 当我们要在程序中输出调试信息时,常常以字符串的形式来输出,例如: printf("Some debug information here!\n"); 这段代码在Debug和Release版下都输出调试信息,这不是我们所要的,一般地大家都会添加预编译指令,如下所示: #if _DEBUG printf("Some debug information here!\n"); #endif 这样就达到了在Debug版里程序输出调试信息,在Rel

C语言输出DEBUG调试信息的方法

问题提出 我们在调试程序时,输出调试信息(又称为"打桩"或者"插桩")是一种普遍.有效的方法. 我们输出的信息通常包括行号.函数名.程序变量等. 但是我们在程序BUG修复后,又会特别烦我们之间插入的哪些调试语句,客户是不会理解我们那些调试语句曾经又多少汗马功劳,而太多的调试语句也影响我们程序运行时输出的美观和清晰,于是很多情况下我们需要手动将那些调试语句注释掉或者删掉,这对于小项目来说,我们还可以忍受,但是对于大项目,如果我们还是手动删除,我们只能....呵呵,这不

openwrt 插拔网线是打印调试信息

问题描述 openwrt 插拔网线是打印调试信息 用的是AR9331 TL-741ND的板 先咨询一下大家,知不知道怎么在插拔网线的时候打印 信息.在哪里修改呢

android程序,在运行时莫名的死掉,只打印一堆GC信息,其他调试信息看不到

问题描述 android程序,在运行时莫名的死掉,只打印一堆GC信息,其他调试信息看不到 这个程序主要开辟子线程,从服务器获取图片的url,然后利用url从网络下载图片的.运行时,不知何种原因,莫名的死掉,只能打印出一堆GC信息 解决方案 检查你用的这台手机,后台Log开关是否打开了. 百度一下 解决方案二: 从你的描述看,应该是低配置机器的java虚拟机heapsize设置得比较小造成的. 你可以参考下面这个链接,修改一下你的Manifest文件试试. 如果低端机的本身限制了Heapsize,

codeigniter发送邮件并打印调试信息的方法_php实例

本文实例讲述了codeigniter发送邮件并打印调试信息的方法.分享给大家供大家参考.具体如下: 这里的codeigniter代码实现发送邮件并打印调试信息的功能,用codeigniter自带的邮件发送库发送邮件 $this->load->library('email' ); $this->email- >from(' you@example. com' , ' Your Name' ); $this->email- >to('someone@example. com

android真机调试时无法显示logcat信息的解决方法介绍

以下是对android真机调试时无法显示logcat信息的解决方法进行了详细的分析介绍,需要的朋友可以过来参考下   android真机调试时无法显示logcat信息的解决方法介绍: window-->show view-->android->devices, 打开devices,点击右边的截屏图片的按钮.等到出现截图的时候,logcat就出来信息了!

gdb-gdp调试的时候查看寄存器信息提示 The program has no registers now.怎么解决?

问题描述 gdp调试的时候查看寄存器信息提示 The program has no registers now.怎么解决? 源代码是这样的#include ""stdio.h""#include ""string.h"" char code[]=x41x41x41x41x41""x41x41x41x41x41""x41x41x41x41x41""x41x41x41&q

android真机调试时无法显示logcat信息的解决方法介绍_Android

android真机调试时无法显示logcat信息的解决方法介绍: window-->show view-->android->devices, 打开devices,点击右边的截屏图片的按钮.等到出现截图的时候,logcat就出来信息了!

android真机调试时无法显示logcat信息的解决办法

android真机调试时无法显示logcat信息的解决办法: window-->show view-->android->devices, 打开devices,点击右边的截屏图片的按钮.等到出现截图的时候,logcat就出来信息了!