我最近使用命令行选项 gtest_break_on_failure 或通过定义 GTEST_BREAK_ON_FAILURE 环境变量从 googletest 发现了 Failures into Break-Points - option。
我使用 gtest_break_on_failure 进行了尝试。从命令行,我没有看到任何效果(说实话,我隐约看到希望 VS2010 会被注册为调试器,并且会神奇地弹出并指向错误源)。
在 VS 环境中使用它作为命令行参数,失败的断言触发了中断,但调用堆栈不包含导致失败的测试方法。我找到了解决步骤(F10)的方法,直到达到我的测试代码,但这似乎并不方便。
是否可以通过命令行使用该选项?
有人建议如何在环境中获取正确的调用堆栈吗?
在 VS 中,您可以将
--gtest_break_on_failure
添加到目标属性页中的命令参数,然后只需运行 exe,无需跳过。
从命令行,您应该能够使用标志
--gtest_break_on_failure --gtest_catch_exceptions=0
运行调试可执行文件,这应该允许您在测试失败时闯入 MSVC 调试器。
以下是如何在调试器下运行测试时自动启用
break_on_failure
。 googletest
在 gtest_main.cc 中带有自己的 main
入口点,可以修改它或将您自己的 main 添加到测试项目中来覆盖默认行为。
这是我添加的更改:
#include "gtest/gtest.h"
#include <windows.h>
GTEST_API_ int main(int argc, char** argv)
{
#ifdef _WIN32
if (IsDebuggerPresent())
testing:: GTEST_FLAG(break_on_failure) = true;
#endif
//printf("Running main() from %s\n", __FILE__);
testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
具体来说,如果
IsDebuggerPresent,ifdef 为
_WIN32
的部分会自动设置 break_on_failure
GTEST_FLAG。