我正在使用boundsChecker检测内存,但是当我使用本机c/c++工具管理器的错误检测类型的工具构建它时,我得到了构建错误。当我看到output窗口时,它显示NM2002: Inline expansion (/Ob)在检测期间使用此错误。
但是,当我选择检测类型作为性能或覆盖率分析时,源代码是成功构建的,但是当我运行测试用例来检查内存泄漏时,它没有显示任何内存泄漏。有没有人能帮我...另外,请建议我应该使用哪种类型的检测工具来检测内存泄漏。
发布于 2013-02-21 19:07:35
关于检测内存泄漏,您需要激活“内存跟踪”子系统。默认情况下处于激活状态。但是,它不跟踪由托管C/C++分配的内存,只跟踪非托管分配的内存。
你介意分享你的测试用例吗?我是维护产品的开发人员之一,如果有必要,我们可以安排一个保密协议的协议。
发布于 2013-02-21 19:12:07
当我们在两次编译之间插入代码时,/Obn内联确实会导致被植入代码的错误。代码被给予第一次编译,并且一些代码可能被标记为可能的内联。然后,我们将所有插装添加到中间语言中。然后进行编译的最后一次传递,如果他们试图用插装内联代码,可能会发生不好的事情。这就是为什么我们尽可能禁用内联,并在需要时生成错误的原因。
您使用的是哪个VS版本?Devpartner的哪个版本?
您将需要使用错误检测功能进行编译以捕获内存泄漏。我建议使用Debug build编译,同时关闭内联。
编辑我刚刚用VS2008和VS2010以及当前的11.1候选版本运行了几个测试
我没有收到错误,而是
1>检测正在添加(/Ob0)以关闭内联1>cl :命令行警告D9025:使用'/Ob0‘重写'/Ob1’
警告1 D9025:使用'/Ob0‘覆盖'/Ob1’e:\cust\Anthony\ Test \ Test \cl测试警告2警告D9025:使用'/Ob0‘e:\cust\Anthony\Test\Test\cl测试覆盖'/Ob1’
这些消息告诉我们正在禁用内联。只有在启用了将警告视为错误的情况下,才会将其视为错误。
https://stackoverflow.com/questions/14995837
复制相似问题