C ++ BoundsChecker跟进

时间:2010-11-22 14:13:19

标签: c++ visual-studio memory-leaks

我们已经使用BoundsChecker for Visual C ++ 6运行了多年(我认为它也是BoundsChecker 5或6)。我们已经升级到VS2008(终于!),现在需要对过时的BoundsChecker进行跟进。

风景如何?
那里有什么工具?
镇上有新的孩子吗? 处理我们使用内存分析器的问题的任何新想法?
您最近使用这些工具的经历?
建议?

主要应用程序是带有许多COM DLL的C ++,我们希望跟踪本机,C ++和COM泄漏和对象。这个大小的Bounds Checker已经在表现上很痛苦,整理了大量的数据和一些限制。

需要支持托管应用程序(主要是C#),但这可能是一个单独的工具。


相关(但IMO不完整)问题:Modern equivalent of BoundsChecker for Visual Studio 2008


[编辑]

注释评论,“在现代C ++中,你只使用自检类型,并且边界永远不会被破坏”

引用计数智能指针可以具有循环引用。连接COM组件本质上是不安全的,因为它需要大量的手动内存管理。我有一个没有UI的第三方服务泄漏GDI处理所以它崩溃我们的隔夜测试 - 供应商将其归咎于一个“奇怪的”Microsoft API。我必须接口基于C的库,我有大量遗留代码,假设在数字食谱意义上的分配技巧是一件好事,并且变量名称长于3个字母是打字员。我有来自工程师的代码std::vector<double>::iterator看起来比double ***更可怕,祝你在信号处理方面没有扎实的背景,开发和测试这些代码。

因此,除非你来到这里,否则在傻瓜式C ++课程中重写并封装一百万行代码的核心,并确保几十个产品仍然像以前一样工作,让你的智能自信。我希望我不需要记忆检查器,但我确实如此。谢谢。

4 个答案:

答案 0 :(得分:3)

免责声明和警告:我为DevPartner Studio和BoundsChecker产品的所有者Micro Focus工作。

BoundsChecker 10.5是DevPartner Studio 10.5的一部分(虽然你可以自己购买),它支持32位和64位应用程序的Visual Studio 2005,2008和2010非托管代码,它基本上与Visual Studio上支持32位应用程序的方式相同6.0。在增强它以支持X64应用程序的同时,我们发现并修复了一些非常古老的问题,并且尽管在某些VS 2010应用程序中存在.NET 4.0代码,但仍然开始工作。我说“尽管如此”,因为.NET 4.0最终会在流程空间中做很多非常讨厌的事情,做一些微软警告其他人不要做的事情,并且对工具有一定的内在抵抗力比如BoundsChecker,它们本质上就是巨大的病毒。

无论如何,自那个版本(2月4日)以来,我们已将其更新为适用于Windows 7 SP1(尚未公开),就BoundsChecker而言,我们也使用Visual Studio 2010 SP1 。我们还发现了一个令人讨厌的.NET 4.0陷阱,并想通过防止它让我们失望。这些增强功能和修复将在我们的下一次公开更新中提供,希望在下个月左右。

答案 1 :(得分:2)

我们评估了Boundschecker,英特尔的Inspector和Purify。

他们或多或少都是垃圾。

对于我们的主要应用程序,BoundsChecker不会在数小时后启动它;它只适用于几个较小的应用程序;但找到了一些东西(我想我们仍然与他们联系以解决问题)

英特尔的Inspector可以工作,但不会检测代码,它只运行在可执行文件上(当与整套英特尔产品一起使用时可能效果更好)。

净化失败了;我们永远无法使用它。

我们仍然处于不确定状态。

最大

答案 2 :(得分:2)

我有一个庞大的应用程序(在这里工作),新的边界检查10.5(现在支持64位应用程序)几乎可以使用它。 Max的技巧是不要立即打开devpartner bounds checker的所有checker功能。打开内存泄漏,或打开其他一些功能,然后运行您的应用程序。并且无论如何都要排除您不需要的模块。您可以使用很多东西来调整设置,以便更快地完成。但是,它确实会受到性能影响。但这就是球赛的名称。

英特尔的Parrallel检查员给了我们成千上万的误报。没用过。

Purify仅适用于32位应用程序。即小型32位原生应用程序。忘记将它与托管C ++应用程序一起使用。

而且仅仅为了记录,如果你有一个32位的大应用程序,由于大量的内存开销,内存分析工具通常不会起作用。由于32位地址空间中的内存非常有限,因此很快就会耗尽空间,并且工具会失败。

答案 3 :(得分:1)

Boundschecker:我刚买了一个(&amp; ^订阅,只允许我使用该死的产品99天,所以我对此非常不满)但无论如何我有很大的内存麻烦和想法我应该运行这个东西。它似乎抓住了很多有趣的东西,但是这么慢,以这种方式说得好:我的应用程序仍然在DLL初始化代码中;它一直在运行至少几个小时,到目前为止它还没有达到应用程序在第一个COUPLE SECONDS中正常运行的程度.Boundschecker曾经是数字时代的“狗屎”,但它似乎真的是另一个技术孤儿被像Borland编译器这样的机会商业实体兜售。

所以我非常喜欢它,当它有效时,它有很多很棒的信息。我只需要看看我是否能够获得任何不错的结果。它目前使用4 GB以上的RAM,甚至尚未完全启动。因为我使用win7 / 64和一个只能识别12GB的残缺家庭版,所以在发生任何真正有趣的事情之前我可能会耗尽内存。从现在开始几天后......