仅为单个函数/文件启用编译器优化

时间:2013-05-13 05:02:51

标签: c++ visual-c++

我正在使用Visual Studio 2012环境中的C ++代码。 代码库不是很大(包含在大约10-12个源文件中)。我项目中某些功能的执行时间很长(例如,REL模式下为10秒,DEBUG模式下为50秒)

现在在调试时,我经常需要查看在应用程序生命周期结束时执行的函数。有没有办法只为项目中的特定功能和/或文件禁用编译器优化。 这将使我能够优化一些计算功能的执行

注意:我之前错误地提到了“调试符号”而不是“编译器优化”。我基本上是在问这个问题w.r.t.编译器优化,因此在使用断点进行调试时很难检查变量值。

2 个答案:

答案 0 :(得分:6)

您可以在属性 - > C / C ++ - >优化对话框中打开或关闭特定文件的优化。这与您将用于整个项目的对话框相同,但每个文件设置将覆盖项目设置。

如果您愿意这样做,也可以使用#pragma optimize( "", off )#pragma optimize( "", on )包围特定功能或代码区域。

无论哪种方式,您都希望为整个程序生成调试符号。拥有它们不会减慢任何速度,并允许您根据需要调试优化的代码。由于局部变量等在观察窗口中通常不正确并且行号可能不完全对齐,因此更加困难,但在它和反汇编视图之间通常可以告诉您发生了什么。

答案 1 :(得分:0)

您可以在代码中使用_DEBUG宏。您可以定义特定于文件的宏,然后通过undef

将其删除到文件的末尾
#ifndef _DEBUG //enable debug
#define _DEBUG

...//your code

#endif

#ifdef _DEBUG  //disable debug
#undef _DEBUG
#endif

以下是参考:http://msdn.microsoft.com/en-us/library/5bb575z2.aspx