2013-02-21 37 views
0

我插装我用的BoundsChecker源内存检测,但是当我用仪器 原生的C/C++仪表经理的错误检测类型构建它,我得到 生成错误内存泄漏。当我看到输出窗口显示NM2002:在仪表期间使用的内联扩展(/ Ob)这个错误..检测使用的BoundsChecker

但是当我选择仪表类型作为性能或覆盖率分析源构建成功,但是当我运行测试用例检查内存泄漏它没有显示任何内存泄漏.. 任何人都可以帮助我在这... 也请建议我哪种类型的仪器应该用来检测内存泄漏..

回答

0

关于检测内存泄漏,您需要激活“Memory Tracking”子系统。它在默认情况下被激活。但是,它不会跟踪托管C/C++分配的内存,只能通过非托管方式进行分配。

你介意分享你的测试用例吗?我是维护产品的开发人员之一,如有必要,我们可以安排NDA协议。

0

/Obn内联确实会导致检测代码的错误,因为我们在编译过程之间测试代码。代码首先被编译并且一些代码可能被标记为可能的内联。然后,我们将所有仪器添加到中间语言中。然后进行编译的最后一遍,如果他们试图用代码插入代码,可能会发生不良事情。这就是为什么我们禁用内联如果可能,并在需要时产生错误。

您正在使用哪个VS版本? 哪个版本的Devpartner?

您将需要编译错误检测来捕获内存泄漏。我会建议Debug内建编译以及内联关闭。

编辑我只是跑了VS2008和VS2010和当前的11.1发布候选几个测试

我没有得到一个错误,而是

1>仪表是加入(/ OB0),关闭内联 1> cl:命令行警告D9025:用'/ Ob0'覆盖'/ Ob1'

警告1警告D9025:用'/ Ob0'覆盖'/ Ob1'e:\ cust \ Anthony \ Test \ Test \ cl测试 警告2警告D9025:用'/ Ob0'覆盖'/ Ob1':​​\ cust \ Anthony \ Test \ Test \ cl测试

这些消息告诉我们禁用内联。如果您将警告视为启用了错误,那么只会将其视为错误。