禁用为C / ++中的某些行生成调试符号?

时间:2011-06-09 04:43:12

标签: c++ c visual-studio-2010 visual-c++

是否可以指定某些代码块,我不希望在VC ++ 2010的Debug构建中生成调试符号?那么这些部件可以以优化的速度运行,而其他(逻辑)代码块可以调试吗?

原因是我必须读取一个带有百万+行的输入文件,这在调试模式下非常慢,但我不想使用较小的示例输入文件。

干杯, 麦克

2 个答案:

答案 0 :(得分:5)

一些建议:

  • 每个C或C ++文件都可以单独指定选项 - 这在您使用命令行进行编译时很明显,但您也可以在IDE中执行此操作。没有必要设置一个单独的项目。只需右键单击要为其设置“特殊”的文件,然后选择“属性”。这样做的一大缺点是,特定文件与项目设置的设置不同并不明显,因此当您忘记特定于文件的属性后,如果事情似乎没有像您期望的那样构建,则可能会造成混淆。已经确定。
  • 您可以尝试使用optimize pragma(http://msdn.microsoft.com/en-us/library/chh3fb0k.aspx)来查看它是否能满足您的需求

请注意,符号生成和优化是分开的 - 优化的代码可以生成符号而不会损害优化(但由于优化调试器可能仍然会混淆跟踪或设置断点)。但是没有太多理由试图压缩特定文件的符号(除非为了混淆目的)。

需要注意的一些其他事项是,调试和非调试运行时之间也存在差异 - 您只能链接到其中一个或另一个。因此,如果您想要摆脱的缓慢是在调试运行时,您将不得不链接到非调试运行时,这可能会妨碍您在其他方面进行调试。如果您正在使用C ++,那么还存在调试和安全迭代器的问题(由_HAS_ITERATOR_DEBUGGING_SECURE_SCL宏控制) - 您不能混合和匹配使用不同设置编译的代码迭代器配置(参见Visual Studio debug iterators)。

答案 1 :(得分:2)

我更喜欢替代解决方案(需要更少的工作)。如果你找不到,这可能适合你:

  • 将长期执行的输入处理代码移动到单独的库项目
  • 将库构建为非调试
  • 将图书馆链接到您的主项目
  • 将主项目编译为debug