我们使用Google作为我们的C++单元测试框架。但我遇到了一个痛苦的情况,我不知道如何处理。
基本上,当代码中有一个不明确的异常时,我在控制台中得到以下错误消息,并得到一个失败的。显然,例外情况是由google测试捕获的。但是,我一点也不知道哪里是异常抛出。
未知文件:错误:在测试体中抛出代码0xc000005的SEH异常。
我所能做的就是调试并逐步完成代码,我最终会发现问题出在哪里。但这并不是很有效率,因为这个项目很大。
我希望调试器停止在默认异常线,并给我一个很好的调用堆栈。谷歌测试中有没有我不知道的设置?任何其他工作或建议将是非常感谢的。
编辑:我正在寻找类似于Windows下的以下内容

最后,根据答案,我找到了visual的设置,一切都按照我现在想要的方式工作:)

发布于 2015-05-14 14:56:20
SEH异常是而不是,是C++异常。
它是在标准C++框架之外抛出的用于异常处理的窗口异常(捕获它们有不同的语法)。
找到位置的最好方法是在DevStudio中运行这个位置。已经有一段时间了,但我确信,当抛出SEH异常时,DevStudio可以选择中断。只要打开它,调试器就会在抛出点停止,并允许您进行调试。
请参阅:https://msdn.microsoft.com/en-us/library/d14azbfh.aspx
正如@MatthiasVegh所指出的,您也应该通过测试的名称,这样您就不必运行所有的测试。
发布于 2015-05-14 14:40:48
在工作中,我使用的方法是只使用gdb运行失败的测试用例,如下所示:
gdb /path/to/test
catch throw
r --gtest_filter='Test.Testcase' --gmock_verbose=info
bt使用visual studio,我怀疑您应该能够像上面那样使用参数启动二进制文件,并将断点设置为任何抛出,然后查看回溯。
发布于 2015-05-14 14:39:26
这是不可能的,因为C++没有在异常对象中保持堆栈跟踪,而且即使gtest有一些智能捕获机制,它也无法知道异常来自何处。您能做的最好是自己在异常中存储一些信息,并在测试用例中检查它。
https://stackoverflow.com/questions/30239987
复制相似问题