我们已经使用BoundsChecker for Visual C++ 6运行了多年(我认为它也是BoundsChecker 5或6)。我们已经升级到VS2008 (终于!),现在需要对过时的BoundsChecker进行跟踪。
风景怎么样?
外面有什么工具?
城里有新来的孩子吗?
对于我们使用内存分析器解决的问题,有什么新的想法吗?
你最近使用这些工具的经验?
建议?
主要应用程序是C++与许多COM DLL的,我们正在寻找跟踪本机,C++和COM泄漏和对象。对于这个大小的边界检查器已经是一个性能上的痛苦,整理了大量的数据和它的一些限制。
支持托管应用程序(主要是C#)是必需的,尽管这可能是一个单独的工具。
相关问题(但海事组织不完整):Modern equivalent of BoundsChecker for Visual Studio 2008
编辑
请重新声明“在现代C++中,您只需使用自检查类型,并且边界永远不会中断”:
引用计数智能指针可以具有循环引用。COM组件的接口本质上是不安全的,因为它需要大量手动内存管理。我有一个没有UI的第三方服务泄漏GDI处理,所以它破坏了我们的夜间测试-供应商把它归咎于一个“奇怪”的微软API。我必须与基于C的库进行接口,我有大量的遗留代码,这些代码假设从数字累进的意义上来说,分配技巧是一件好事,而且对于打字员来说,变量名的长度超过3个字母。我有来自工程师的代码,对于这些工程师来说,std::vector<double>::iterator看起来比double ***要可怕得多,在没有信号处理背景的情况下开发和测试这些代码,祝你好运。
因此,除非您来到这里,重写并封装一百万行代码的核心代码,并将其封装在防傻瓜的C++类中,并确保几十种产品仍能像以前一样工作,保持您的智能断言。我希望我不需要一个记忆检查器,但我需要。谢谢。
发布于 2011-03-08 17:09:20
我有一个庞大的应用程序(在这里工作),而新的边界检查10.5 (现在支持64位应用程序)几乎与它一起工作。最大的诀窍是不要一次打开devpartner边界检查器的所有检查功能。打开内存泄漏,或者只打开其他功能,然后运行应用程序。当然,排除你不需要的模块。有相当多的东西,你可以用来调整你的设置,所以它走得更快。但是的,这确实会让演出受到打击。但这就是球赛的名字。
英特尔的平行检验员给了我们成千上万的假阳性。没用过。
Purify只适用于32位应用程序。例如,小型32位本地应用程序。忘记与托管C++应用程序一起使用它吧。
为了记录在案,如果您有一个大型32位应用程序,内存分析工具一般不会很好地工作,因为内存开销很大。而且,由于32位地址空间中的内存非常有限,所以您很快就没有空间,而工具就会失败。
发布于 2011-03-08 23:53:04
免责声明和警告:我为Micro工作,拥有DevPartner工作室和BoundsChecker产品。
BoundsChecker 10.5是VisualStudio10.5的一部分(尽管您可以自己购买),它支持Visual 2005、2008和2010的32位和64位应用程序的非托管代码,其方式与它在VisualStudio6.0上支持32位应用程序的方式基本相同。在增强它以支持X64应用程序的同时,我们发现并修复了一些非常老的问题,并开始工作,尽管有些VS 2010应用程序中存在.NET 4.0代码。我之所以说“尽管如此”,是因为.NET 4.0在进程空间里做了很多非常讨厌的事情,做了一些微软警告其他人不要做的事情,并且对BoundsChecker这样的工具有一定程度的内建抵抗力,这些工具本质上是巨大的病毒。
无论如何,自从那个版本(2月4日)以来,我们已经更新了它以在Windows7 SP1上工作(这还不是完全公开的),至于BoundsChecker,我们也使用了Visual 2010 SP1。我们还发现了一个讨厌的.NET 4.0陷阱,并找到了防止它把我们打倒的办法。这些增强和修复将在我们的下一次公开更新中提供,希望在下个月左右。
发布于 2010-11-24 14:37:20
我们评估了列奇克,英特尔的检查员和Purify。
他们差不多都是垃圾。
对于我们的主要应用程序,BoundsChecker不会在许多小时后启动它;它只对几个较小的应用程序起作用;但是找到一些东西(我认为我们仍在与它们联系以解决问题)
Intel的检查器工作,但不对代码进行测试,它只在可执行文件上运行(可能在整个Intel产品套件中使用时工作得更好)。
净化令人遗憾地失败了;我们永远无法使用它。
这件事我们还没搞清楚。
麦克斯。
https://stackoverflow.com/questions/4246253
复制相似问题