Visual C++:在发布模式下启动/不启动调试之间的区别

Ash*_*ppa 16 debugging release visual-studio visual-c++

Release模式下编译代码时,Start Debugging(F5)Start without Debugging(CTRL- F5)之间有什么区别?

我看到CTRL- F5F5某些C++代码快10倍.如果我没有错,调试器将附加到执行进程,F5而不是CTRL- F5.由于这是Release模式,编译后的代码没有任何调试信息.所以,如果我没有任何断点,两者的执行时间应该相同,不是吗?!

(假设Release和Debug模式是您在创建新的Visual C++项目时获得的典型配置.)

小智 17

问题是如果Windows检测到您的程序在调试器下运行,则会在特殊的Debug Heap中出现问题.这似乎发生在操作系统级别,并且与编译的任何调试/发布模式设置无关.

您可以通过设置环境变量来解决此"功能":_NO_DEBUG_HEAP = 1

同样的问题让我疯狂了一段时间; 今天我找到了以下内容,从这篇文章中衍生出来:http: //blogs.msdn.com/b/larryosterman/archive/2008/09/03/anatomy-of-a-heisenbug.aspx


Wil*_*ean 7

"无需调试即可启动"只是告诉Windows启动应用程序,因为它通常会运行.

"从调试开始"启动VS调试器并让它在调试器中运行应用程序.

这与调试/发布构建设置没有太大关系.

当您构建应用程序的默认"调试"配置时,您将与发布版本具有以下主要差异:

  • 发出的代码不会被优化,因此更容易调试,因为它更接近您的源
  • 编译器和链接器将输出一个包含大量额外信息的.PDB文件来帮助调试器 - 这些信息的存在与否对代码的性能没有影响,只是调试的简易性.
  • 像ASSERT和VERIFY这样的条件宏在发布版本中将是无操作,但在调试版本中是活动的.

这些项目中的每一项都是独立且可选的! 您可以打开或关闭其中的任何一个或全部,并仍在调试器下运行代码,您将无法轻松找到生活.

运行'with debugging'时,由于以下几个原因,执行的操作会有所不同:

  • VS调试器在启动时的效率非常低,部分原因是VS中的所有内容都很慢 - 在VS2010之前的版本中,当IDE进入调试模式时,屏幕上的每个像素都将被重新绘制约30次,闪烁和闪烁很多.
  • 根据事物的配置方式,调试器可能会在启动时花费大量时间尝试为很多很多操作系统组件加载符号(即PDB文件),这些组件是您的过程的一部分 - 它可能会尝试通过Web获取这些文件,在某些情况下可能需要一个年龄.
  • 应用程序通常执行的许多活动(加载DLL,启动线程,处理异常)都会导致调试程序被警告.这具有减慢它们的速度和使它们倾向于顺序运行的效果.

  • Ashwin:这是你的应用程序将在调试器下运行时会有不同行为的列表:http://msdn.microsoft.com/en-us/library/ms679302%28VS.85%29.aspx (2认同)