【问题标题】:Setting _HAS_ITERATOR_DEBUGGING=0 in project settings (sometimes) has no effect在项目设置中设置 _HAS_ITERATOR_DEBUGGING=0(有时)没有效果
【发布时间】:2011-05-15 23:27:12
【问题描述】:

我有一个 Visual Studio 2008 解决方案,其中包含多个项目,这些项目都在项目文件的预处理器定义设置中定义了 _HAS_ITERATOR_DEBUGGING=0。但这似乎只适用于某些项目,而其他项目仍然在启用迭代器调试的情况下进行编译。

我检查了解决方案中的每个文件,除了项目设置之外,没有任何地方定义_HAS_ITERATOR_DEBUGGING

#define _HAS_ITERATOR_DEBUGGING 0 添加到解决方案中每个 stdafx.h 的顶部可以解决此问题,但我想知道为什么在项目预处理器定义部分中设置它有时不起作用。有什么想法吗?

【问题讨论】:

  • 我认为 Michael Burr 的回答可能涵盖了它,但也请注意,我的公司遇到了 certain bugs when you build with _HAS_ITERATOR_DEBUGGING=0,因为我们所有的软件都是在禁用该选项的情况下构建的。微软的编译团队提到它应该在 VS2010 中修复。
  • 我不喜欢必须禁用它的想法,但在大多数情况下,这个选项是病毒式的,不幸的是,我们的一个依赖项是在禁用该选项的情况下构建的。

标签: c++ visual-studio-2008 debugging


【解决方案1】:

时不时让我感到困扰的一件事是,项目设置很容易在不同的配置之间变得不同(例如发布与调试)。确保设置存在或您正在构建的配置。当然,定义的拼写正确......

对于有问题的项目,请查看构建日志(BuildLog.htm - 指向它的链接显示在构建输出窗口中)并确保

-D "_HAS_ITERATOR_DEBUGGING=0" 

选项显示在编译器命令行上(实际上是在将命令行选项传递给编译器的响应文件中)。

【讨论】:

  • 检查构建日志给了我需要的提示。问题是项目中几乎所有文件的预处理器定义都是在文件级别设置的,这给我带来了麻烦。文件级别设置被设置为“不继承”,所以我设置的选项被忽略了。构建日志显示的编译器选项与我在项目设置中设置的不同,这让我找到了答案。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-04
  • 2015-02-19
  • 1970-01-01
  • 2023-04-03
相关资源
最近更新 更多