2011-07-06 46 views
6

通常我会让它处理不了,调试器(gdb,Eclipse CDT)会向我显示调用堆栈。不幸的是,代码被第三方库调用,吸收了所有的异常。我可以在第三方库之前捕获异常,但是我看不到调用堆栈(堆栈展开?)。寻找std :: out.of()抛出std :: out_of_range

如何判断抛出异常的位置?

回答

5

请问catchpoints有帮助吗?通过在gdb中输入catch throw命令,可以在抛出异常时中断。在Eclipse中,您可以通过gdb控制台执行此操作。见this question

+0

Upvote and thanks!是的,在这种特殊情况下,他们帮助了:)但是对于未来:我可以根据异常类型进行过滤吗?第三方库使用异常来控制流量...所以我会得到太多关于抛出异常的通知。 – Ali

+0

@Ali:对不起,我知道的是链接。我对此没有任何实际经验。我没有看到指定异常类型的方法。 –

+1

我想接受您的答案,但请为普通观众添加更多信息(在gdb控制台中输入catch throw)以及此链接:http://stackoverflow.com/q/1109922/341970 – Ali

4

您可以在异常对象的构造函数中放置一个断点。由于在抛出异常之前发生这种情况,您可以很好地查看调用代码。

+0

Upvoted和谢谢!我无法使用gdb catch throw解决方案来过滤异常,但是,将out_of_range引发的断点几乎解决了问题。 – Ali

相关问题