【问题标题】:Warning message printed to console not failing the build打印到控制台的警告消息不会导致构建失败
【发布时间】:2013-02-09 23:07:23
【问题描述】:

当错误打开并且警告级别达到最大值时,我收到了警告。我在单元测试中集成了VLD。当我故意制造内存泄漏时,VLD 会在 Visual Studio 输出控制台和警告控制台中打印一条警告。

警告的格式类似于warning : Visual Leak Detector detected memory leaks!

但是,Visual Studio 报告构建成功。 作为错误的警告是否仅限于 Visual Studio 生成的警告?

【问题讨论】:

  • 你把建筑和跑步混为一谈了。 VLD 只能在运行您的代码时检测到泄漏。这会发生在您构建之后
  • @HansPassant 抱歉,我没有在问题中说清楚,我的单元测试作为构建后事件的一部分执行。构建后事件以 Visual Studio 能够在警告选项卡中显示的格式向控制台写入警告......基本上我只是忘记了 VS 依赖外部工具的退出代码来确定成功与否......而且“警告为错误”仅影响编译警告。

标签: c++ unit-testing visual-studio-2012 compiler-warnings visual-leak-detector


【解决方案1】:

是的,“警告是错误”是一个编译器设置,基本上是说“如果(错误级别==警告)错误级别=错误;”在编译器内部。

【讨论】:

  • 你能澄清一下你的答案吗?构建后事件生成的警告不会导致构建失败,因为它们不是来自编译器?
  • 这真的与“退出代码”有关。警告通常会给出应用程序的退出代码为零。当编译器被告知“将警告视为错误”时,它将以非零退出代码退出。视觉泄漏检测器还需要以非零退出代码退出以阻止应用程序失败。如果输出文本中有警告,我想您可以在 VLD 周围添加一个包装器以提供不同的退出代码...
  • 不确定我是否想让 VLD 更改退出代码...我已经有 UT++ 控制返回代码,我不希望他们为此争吵。我目前的工作是将报告写入文件,然后有一个构建后事件 grep 文件以查找错误并以非零代码退出以使构建失败。 (然而,在即将到来的项目中,有一个多线程构建,所有 UT 都驻留在同一目录中。确保它们都使用唯一的泄漏报告文件将是一些工作。
  • 我应该澄清一下,多个 UT 后期构建过程都在同一个工作目录中并并行执行,因此单个泄漏报告文件是行不通的。
  • 是的,这就是我试图解释的那种解决方案,要么搜索输出,要么通过其他工具传递输出。那么,只需在所有泄漏报告中使用 grep 即可?
猜你喜欢
  • 2022-08-21
  • 2011-10-26
  • 2016-10-30
  • 1970-01-01
  • 1970-01-01
  • 2021-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多