我试图使用boundschecker来分析一个相当复杂的程序。运行程序与boundschecker几乎是太慢它的任何使用,因为它需要我几乎每天运行程序的一点在代码在哪里我怀疑这个问题的存在。任何人都可以得到我的一些想法如何检查只有某些部分我的软件使用boundschecker(DevPartner)在Visual Studio2005年?

预先感谢所有你的帮助!

有帮助吗?

解决方案

我最后一次使用BoundsChecker几年前,有同样的问题。与大型项目,它使一切都运行如此缓慢,这是无用的。我们结束了抛弃它。

但是,我们仍然需要它的一些功能,但是像你这样,不适用于整个程序。因此,我们不得不这样做我们自己。

在我们的情况下,我们主要使用其尝试和追踪存储器的泄漏。如果这就是你的目标,还有其他的选择。

  1. Visual Studio做了很好的工作告诉你关于存储器泄漏时,你的程序退出
  2. 它的报告泄漏了,他们被创造了
  3. 它会告诉你到底在哪泄露的记忆的创建是如果你的来源的文件有这样的顶部

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

那些帮助了很多,但它往往是不够的。添加这段无处不在并不总是可行的。如果你使用的工厂班,知道存储器被分配没有帮助的。所以当一切都失败了,我们利用#2.

添加类似如下:

#define LEAK(str) {char *s = (char*)malloc(100); strcpy(s, str);}

然后,胡椒你的代码"泄漏("leak1");"或什么的。运行程序,并退出。你的新泄露串将显示在Visual Studio的泄漏转储周围现有的泄漏。不断增加/移动你泄露的发言和发表重新运行程序,以缩小搜索直到你确定确切的位置。然后修复泄漏,除去调试泄漏,和你所有的设置!

其他提示

的BoundsChecker跟踪极端细节所有存储器分配和释放。它知道,比如,某某内存分配是从C运行时堆,而这又是从Win32堆,这又开始了生活如的VirtualAlloc分配的内存拍摄完成。如果应用程序仪器(FinalCheck),它也有详细信息哪个指针引用存储器中。

这是一个原因(许多)为何物是缓慢的。

如果BC分别连接到一个应用程序晚,那就没有这个数据建立起来的,并且将具有任一(1)挖它全部一次,或(2)开始猜测的事情。既不溶液是非常实用的。

减仓的BoundsChecker一种方式是由仪器不包括所有的,但你感兴趣的几个模块。我知道,因为如果你知道在哪里泄漏是你不需要的BoundsChecker那不是很大。我通常建议是你第一次使用BC的主动检查模式,只有记忆跟踪功能。你错过了API的验证,但你总是可以重新运行seperately。您运行有效确认,你会得到有关线索,模块往往是有问题后,只有这样你才能启用模块或利益及其相关模块的仪器。我们知道最终检查是烦人缓慢,但作为Mistiano正确地指出,与最终检查不仅BC保持所有分配的块,而且所有的指针和环境对他们的图表。其中关键在于如何最终检查可以在一次出现的点钉泄漏和损坏,不只是在应用程序关闭或故障的魔力。无耻插头:我上提高DevPartner团队合作。我们于2011年2月4日发布DPS 10.5,在公元前64位应用程序的支持。不同的是相对古老而抛售BC64安腾只提供有效确认,DPS 10.5提供了64位应用程序完全最终检查的支持,无论是纯C ++和.NET中的进程中运行的本机模块。见microfocus.com下MF开发者的详细信息。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top