我们使用Google Test作为我们的C ++单元测试框架。但我遇到了一个痛苦的局面,并且不知道如何应对。
基本上,当代码中存在未捕获的异常时,我在控制台中打印了以下错误消息并获得 FAILED 。显然,例外是谷歌测试捕获。但是,我根本没有任何信息,抛出异常。
未知文件:错误:测试正文中抛出代码为0xc000005的SEH异常。
我能做的就是调试并逐步完成代码,最终我会找出问题所在。但由于项目很大,这不是很有效。
我希望调试器停在未捕获的异常行并给我一个很好的调用堆栈。谷歌测试中有任何我不知道的设置吗?任何其他工作或建议将非常感谢。
编辑:我正在寻找类似Windows下的内容
最后根据答案,我发现了visual studio的这个设置,一切都按照我现在想要的方式运行:)
答案 0 :(得分:8)
在工作中,我使用的方法是仅使用gdb运行失败的测试用例,如下所示:
gdb /path/to/test
catch throw
r --gtest_filter='Test.Testcase' --gmock_verbose=info
bt
使用visual studio,我怀疑你应该能够使用上面的参数启动你的二进制文件,并为任何一个throw设置一个断点,然后看一下回溯。
答案 1 :(得分:2)
SEH异常 NOT 是一个C ++异常。
这是一个Windows异常,它抛出标准C ++框架之外的异常处理(捕获它们的语法不同)。
找到位置的最佳方法是在DevStudio中运行。它已经有一段时间但我相信DevStudio可以选择在抛出SEH异常时中断。只需打开它,您的调试器就会停在抛出点并允许您进行调试。
请参阅:https://msdn.microsoft.com/en-us/library/d14azbfh.aspx
正如@MatthiasVegh所说,你也应该传递测试的名称,这样你就不必经历所有测试。
答案 2 :(得分:1)
这是不可能的,因为C ++没有在异常对象中保持堆栈跟踪,即使gtest有一些智能捕获机制,它也无法知道异常来自何处。您可以做的最好的事情是自己在异常中存储一些信息,并在测试用例中进行检查。