我遇到了一个奇怪的场景,其中包含以下不太可能的代码:
try{
throw Core::ValueError();
}
catch (Core::Error &e){
...
}
(ValueError继承自Error继承自std :: exception)
如果编译成可执行文件,会导致异常被捕获,但如果编译成特定的共享库则不会被捕获。
所以我的问题:
我可以使用哪些调试工具和/或技术来查看作为异常处理过程的黑盒?我可以用gdb单步执行吗?
我是否可以从Mach-o标题中提取任何信息,告诉我关于某些例句的某些例外的可接受性(如果你愿意)?特别是,我可以看看“gcc_except_tab”部分及其可爱的LSDA,符号表或其他部分,并推断符号可见性或其他与捕获异常相关的问题吗?
我确实找到了一个使用鸡,七只老鼠尾巴和一个粒子加速器的解决方案的在线资源,但我想我先尝试StackOverflow并留下黑魔法作为最后的手段。
(我在OSX 10.6.7上运行i686-apple-darwin10-g ++ - 4.2.1)
答案 0 :(得分:2)
您正在抛出一个临时对象,因此您应该catch( Core::Error const& e )
。