设置 WatchPoint 你可以在你的程序中,对你所想监控的程序设置一些 WatchPoint ,以方便于你对程序进行调试,或更容易找出问题的原因。就像我前面说, Purify 可以找到你的内存泄露,但其不能找到内存泄露的原因,你可以通过设置 WatchPoint 来" name="description" />

C/C++内存问题检查利器—Purify 设置WatchPoint

发表于:2009-04-20来源:作者:点击数: 标签:WatchPoint利器Purify内存检查
MI LY: 宋体">设置 WatchPoint 你可以在你的程序中,对你所想监控的程序设置一些 WatchPoint ,以方便于你对程序进行调试,或更容易找出问题的原因。就像我前面说, Purify 可以找到你的内存泄露,但其不能找到内存泄露的原因,你可以通过设置 WatchPoint 来

MILY: 宋体">设置WatchPoint

你可以在你的程序中,对你所想监控的程序设置一些WatchPoint,以方便于你对程序进行调试,或更容易找出问题的原因。就像我前面说,Purify可以找到你的内存泄露,但其不能找到内存泄露的原因,你可以通过设置WatchPoint来跟踪一块内存,以找到在程序执行过程中该内存的访问情况。

 

PurifyWatchPoint可以产生下例消息:

 

l         WPR(被WatchPoint的内存读)

l         WPW(被WatchPoint的内存写)

l         WPM(被WatchPoint的内存分配)

l         WPF(被WatchPoint的内存释放)

l         WPN(来到被WatchPoint的内存的Scope

l         WPX(离开被WatchPoint的内存的Scope

 

一旦你设置好了一个WatchPointPurify会自动报告上述这些信息,以告诉你内存的存取情况。很方便你调试程序。

 

WatchPoint一般是在调试程序时跟踪一块内存时候使用的,你也可以用其跟踪一些系统级的全局变量,如:errno。一旦errno被写了,马上会报告一个WPW消息,展开后,你能看到函数的堆栈情况,以及是在哪个系统调用后出现了错误。这个使用很方便我们找到一些非内存方面的问题。

 

大家可能会有一种感觉,那就是在一般的调试器中,如GDB中也有WatchPoint的设置(对GDB的使用请参考我的文章《GDB调试程序》),那么,在调试器中的WatchPointPurify的有什么不同?下面是一些GDB中的WatchPoint不足的地方:

 

1)  GDB中的WatchPoint用于单步跟踪中。

2)  GDB中的WatchPoint只能在其内存的Scope中,离开了ScopeWatchPoint会被删除。

3)  GDB中设置一个4字节的内存WatchPoint,会让程序的运行效率下降1000个数量级。

 

Purify中的WatchPoint有效地克服了这些问题,它在全局范围内监控所有内存的使用,并且,其速度上大大地快于GDB等一系列的调试器。

 

有两种方式可以让我们设置PurifyWatchPoint,一种是在程序中使用WatchPointAPI函数,一种是直接在调试器中使用(如:GDB),下面我介绍一下这两种用法:

原文转自:http://www.ltesting.net