如果我在后期构建步骤中输出“ERROR”,则VS2013构建失败 - 我认为

时间:2017-06-21 19:21:02

标签: c++ visual-studio-2013

这有点奇怪,我尝试谷歌但没有太多运气。此外,我为长时间的引入道歉...但我认为了解发生了什么是必要的所有信息?

我在C ++工作,使用Visual Studio 2013,我有自己的单元测试实现。测试项目是解决方案的一部分,并且有一个post build事件运行它们(使用刚刚构建的可执行文件),如果甚至返回非0,则构建失败(应该如此)。

我也有自己的基于宏的输出系统,它使用OutputDebugString打印到开发环境中的输出窗口,所以我可以使用这样的语句:

AI_ERROR("Some ERROR message with C-style %s", "arguments");
AI_WARN("Some ERROR message with C-style %s", "arguments");
AI_LOG("Some ERROR message with C-style %s", "arguments");
AI_ERROR_CONFIG("Some ERROR message with C-style %s", "arguments");
AI_WARN_CONFIG("Some ERROR message with C-style %s", "arguments");
AI_LOG_CONFIG("Some ERROR message with C-style %s", "arguments");

当我直接运行可执行文件时,这将导致此输出:

(0.0000) tesaitest.cpp:87 ERROR: Some ERROR message with C-style arguments
(0.0000) tesaitest.cpp:88 WARNING: Some ERROR message with C-style arguments
(0.0000) tesaitest.cpp:89 LOG: Some ERROR message with C-style arguments
(0.0000) tesaitest.cpp:90 ERROR (CONFIGURATION): Some ERROR message with C-style arguments
(0.0000) tesaitest.cpp:91 WARNING (CONFIGURATION): Some ERROR message with C-style arguments
(0.0000) tesaitest.cpp:92 LOG (CONFIGURATION): Some ERROR message with C-style arguments

这一切都有效 - 到目前为止一切顺利。

这里有点奇怪。如果我直接运行测试的可执行文件,然后它运行,它打印我上面显示的消息,它返回0 - 这是预期的,因为我从来没有编写任何代码来做任何不同的事情。但是,当我编译并且测试作为post build事件运行时,它返回-1。如果我注释掉两个错误消息(AI_ERROR和AI_ERROR_CONFIG),那么它返回0,即使输出字符串中仍然包含单词“ERROR”。这实际上是我想要的行为 - 但这是一个多编译器项目,我想确保执行是一致的,所以我想确保我是实现它的那个,而不仅仅是dev环境做它适合我。

我注意到的另一件事是,在我编译的输出中,单词“error”和“warning”是小写,但“log”不是 - 而且它们在原始代码中不是小写。这是输出的样子:

1>(0.0000) tesaitest.cpp : 87 error : Some ERROR message with C-style arguments
1>(0.0000) tesaitest.cpp : 88 warning : Some ERROR message with C-style arguments
1>  (0.0000) tesaitest.cpp:89 LOG: Some ERROR message with C-style arguments
1>(0.0000) tesaitest.cpp : 90 error (CONFIGURATION): Some ERROR message with C-style arguments
1>(0.0000) tesaitest.cpp : 91 warning (CONFIGURATION): Some ERROR message with C-style arguments
1>  (0.0000) tesaitest.cpp:92 LOG (CONFIGURATION): Some ERROR message with C-style arguments

字符串的那一部分作为枚举(Error或ConfigError)传递给print函数,但是在我将它传递给OutputDebugString之前,我使用vsnprintf_s将整个消息编译成一个char缓冲区。

当然,为了增加乐趣,因为这只发生在编译期间,而不是直接运行可执行文件时,我无法在调试器中捕获它。

那么......是否有人了解MS如何/为什么确定这些是错误并改变返回值?有没有可以将其关闭的设置?正如我所说,因为这是一个多编译器项目,也因为我可能希望能够有错误消息实际上不代表失败测试的情况(即我想测试错误消息以便在错误的输入上生成)我宁愿我完全控制返回值...

0 个答案:

没有答案