0

我正在使用 boundsChecker 检测我的源代码以进行内存检测,但是当我使用本机 c/c++ 检测管理器的错误检测类型检测构建它时,我遇到了构建错误。当我看到输出窗口时,它显示 NM2002: Inline expansion (/Ob) used during instrumentation this error..

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

4

2 回答 2

0

With regards to detecting memory leaks, you need to activate the "Memory Tracking" subsystem. It is activated by default. However, it does not track memory allocated by managed C/C++, only by unmanaged.

Would you mind sharing your test case? I am one of the developers maintaining the product, and if necessary we can arrange for an NDA agreement.

于 2013-02-21T11:07:34.597 回答
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\测试\测试\cl 测试

这些消息告诉我们正在禁用内联。如果您已启用将警告视为错误,您只会将此视为错误。

于 2013-02-21T11:12:06.603 回答