我正在使用boundsChecker检测我的源代码以进行内存检测,但是当我构建它时 本机c / c ++检测管理器的错误检测类型的检测,我得到了 构建错误。当我看到输出窗口时它显示NM2002:在仪器测量期间使用的内联扩展(/ Ob)此错误..
但是当我选择检测类型作为性能或覆盖率分析时,源代码正在成功构建,但是当我运行测试用例来检查内存泄漏时,它没有显示任何内存泄漏。 任何人都可以帮我这个... 还请建议我使用哪种仪器来检测内存泄漏..
答案 0 :(得分:0)
关于检测内存泄漏,您需要激活“内存跟踪”子系统。它默认激活。但是,它不会跟踪托管C / C ++分配的内存,只能跟踪非托管内存。
你介意分享你的测试用例吗?我是维护该产品的开发人员之一,如有必要,我们可以安排NDA协议。
答案 1 :(得分:0)
/ Obn内联确实会导致检测代码出错,因为我们在编译过程之间检测代码。代码是第一次编译,一些代码可能被标记为可能的内联。然后,我们将所有仪器添加到中间语言中。然后进行编译的最后一次传递,如果他们尝试使用检测内联代码,则可能会发生错误。这就是我们尽可能禁用内联并在需要时生成错误的原因。
您使用的是哪个VS版本? 哪个版本的Devpartner?
您需要使用错误检测进行编译以捕获内存泄漏。我建议调试构建编译以及内联关闭。
编辑我刚刚用VS2008和VS2010以及当前的11.1候选版本
进行了一些测试我没有收到错误,而是
1> Instrumentation正在添加(/ Ob0)以关闭内联 1> cl:命令行警告D9025:使用'/ Ob0'覆盖'/ Ob1'
警告1警告D9025:使用'/ Ob0'覆盖'/ Ob1'e:\ cust \ Anthony \ Test \ Test \ cl测试 警告2警告D9025:用'/ Ob0'覆盖'/ Ob1'e:\ cust \ Anthony \ Test \ Test \ cl测试
这些消息表明我们正在禁用内联。如果您在启用错误时将警告视为错误,则只会将此错误视为错误。