2011-05-26 49 views
2

我也遇到过其中存在以下可能性不大代码一个奇怪的场景:未捕获的异常 - 调试运行技术(C++)

try{ 
    throw Core::ValueError(); 
} 
catch (Core::Error &e){ 
    ... 
} 

导致(ValueError异常与错误继承的std ::例外继承)如果编译到可执行文件中,则会捕获异常,但如果编译到特定的共享库中则不会。

所以我的问题:

  1. 什么样的调试工具和/或技术,我可以使用黑盒是异常处理过程里面偷看?我可以用gdb来完成它吗?

  2. 是否有任何信息可以从Mach-o标题中提取出来,告诉我有关某些catch子句的某些例外情况(如果您愿意的话)的任何可能性?特别是,我可以在“gcc_except_tab”部分看看它可爱的LSDA或符号表或其他部分,并推断出符号可见性或与捕获异常相关的其他问题的任何问题吗?

我确实发现声称使用鸡,七个老鼠尾巴和粒子加速器解决方案的在线资源,但我想我会先试的StackOverflow离开魔法作为最后的手段。

(我运行的i686-苹果darwin10-G ++ - 4.2.1 OSX 10.6.7)

所有帮助表示赞赏。 谢谢!

+0

发布一个完整的,最小的示例来演示问题。我尝试将该代码编译为共享库,并且按预期捕获异常。 – 2011-05-27 01:32:56

+0

是的,我得到了一个简单的重建尝试的结果(异常被捕获)。所以现在我有一个简单的例子,一个复杂的例子,但不是比较它们的工具。我开始从原始代码中删除部分,以尽量减少它,但仍然在复制问题,但我仍在处理一个黑盒 - 我想知道更多。 – 2011-05-28 06:46:24

回答

2

你正在扔一个临时对象,所以你应该catch(Core::Error const& e)