Visual Studio 2010 上的 VC++:使用调试堆发布构建

Posted

技术标签:

【中文标题】Visual Studio 2010 上的 VC++:使用调试堆发布构建【英文标题】:VC++ on Visual Studio 2010: Release builds using debug heap 【发布时间】:2011-10-25 06:46:20 【问题描述】:

我正在对慢速 C++ 应用程序进行基准测试/优化,在拍摄一些堆栈快照时,我发现我的应用程序的发布版本正在使用调试堆,因为发现的一些堆栈跟踪表明:

ntdll.dll!string "Enabling heap debug options\n"()  + 0x11056 bytes 

这是一个在 Windows 7 上运行的 64 位应用程序。我在完全相同的在线环境中看到了两三个关于此问题的其他投诉,但没有任何响应。

有没有人知道为什么 Windows 或 Visual Studio 将调试堆用于发布构建 C++ 项目?

【问题讨论】:

+1 用于使用 stackshots。 【参考方案1】:

The debug heap is used when a program is run under debugger(分析器通常表现为调试器)。为了绕过它,程序应该在没有调试的情况下启动,然后调试器应该附加到一个正在运行的进程。

【讨论】:

谢谢。我不知道我怎么从来不知道这一点,尽管我承认我没有看到强制发布应用程序使用调试堆的好处 - 不是发布点以尽可能接近真实世界情景!? @Mahmoud Al-Qudsi:这件事实际上并不那么出名,我也很惊讶知道它。好吧,调试堆有助于调试,而调试器有助于调试,所以我猜他们决定将它结合起来。此外,它不是由 Visual Studio 或类似的东西完成的 - 它是由 Windows 完成的。

以上是关于Visual Studio 2010 上的 VC++:使用调试堆发布构建的主要内容,如果未能解决你的问题,请参考以下文章

在不安装 Visual Studio 2010 的情况下使用 vc100 平台工具集?

从 VC6 到 Visual Studio 2010 的 C++ 序列化

在 Visual Studio 2010 (utility.obj) 中使用带有 VC++ 的 QuickFix 时出错

visual studio 2010编译c的设置方法

在 Visual Studio 2010 (C++) 中集成 MATLAB 代码

串口通信IN C++(适用于Microsoft Visual Studio 2010/2012/2013 ,VC++6.0 )