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

风景如何?
那里有什么工具?
城里有新 child 吗?
关于使用内存探查器的问题有任何新想法吗?
您最近在使用这些工具方面的经验?
建议?

主要应用程序是带有许多COM DLL的C++,我们希望跟踪 native ,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++类中,并确保数十种产品仍能像以前一样工作,让自己掌握自己的聪明才智。我希望我不需要内存检查器,但是我需要。谢谢你。

最佳答案

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

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

Purify仅适用于32位应用程序。即小型32位 native 应用程序。不用在托管C++应用程序中使用它。

仅作记录,如果您拥有大型32位应用程序,则由于大量的内存开销,内存分析工具通常将无法正常工作。而且,由于32位地址空间中的内存非常有限,因此您很快就会用尽空间,并且工具会失败。

关于C++ BoundsChecker后续,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4246253/

10-11 09:19