不知道使用google-test抛出异常的地方

Yuc*_*ong 4 c++ exception-handling exception googletest visual-studio-2013

我们使用Google Test作为我们的C++单元测试框架.但我遇到了一个痛苦的局面,不知道如何应对.

基本上,当代码中有未捕获的异常时,我在控制台中打印了以下错误消息并获得FAILED.显然,例外是谷歌测试捕获.但是,我根本没有任何信息,抛出异常.

未知文件:错误:测试正文中抛出代码为0xc000005的SEH异常.

我能做的就是调试并逐步完成代码,最终我会找出问题所在.但由于项目很大,这不是很有效.

我希望调试器停在未捕获的异常行并给我一个很好的调用堆栈.谷歌测试中有任何我不知道的设置吗?任何其他工作或建议将非常感谢.

编辑:我在Windows下寻找类似下面的内容 在此输入图像描述

最后根据答案,我发现了visual studio的这个设置,一切都按照我现在想要的方式工作:) 在此输入图像描述

小智 9

在工作中我使用的方法是使用gdb运行只有失败的测试用例,如下所示:

gdb /path/to/test
catch throw
r --gtest_filter='Test.Testcase' --gmock_verbose=info
bt
Run Code Online (Sandbox Code Playgroud)

使用visual studio,我怀疑你应该能够使用上面的参数启动你的二进制文件,并为任何throw设置一个断点,然后看看backtrace.

  • 很高兴知道`gdb`的`catch throw`.我一定会试试这个.但是你知道`nmake`的任何等效设置吗? (2认同)

Mar*_*ork 2

SEH 异常不是C++ 异常。

它是一个 Windows 异常,被抛出到标准 C++ 框架之外进行异常处理(有不同的语法来捕获它们)。

找到该位置的最佳方法是在 DevStudio 中运行它。已经有一段时间了,但我确信 DevStudio 可以选择在抛出 SEH 异常时中断。只需打开此功能,您的调试器就会在抛出点停止并允许您进行调试。

请参阅:https ://msdn.microsoft.com/en-us/library/d14azbfh.aspx

正如@MatthiasVegh 所指出的,您还应该传递测试的名称,这样您就不必运行所有测试。