未捕获的异常调试技术(C++)



我遇到了一个奇怪的场景,其中有以下不太可能的代码:

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

(ValueError继承自Error继承自std::exception)

如果编译到可执行文件中,则会导致捕获异常,但如果编译到特定的共享库中,则不会捕获异常。

我的问题是:

  1. 我可以使用哪些调试工具和/或技术来窥探作为异常处理过程的黑盒内部?我可以用gdb来完成它吗?

  2. 我是否可以从Mach-o标头中提取任何信息,告诉我某些catch子句对某些异常的可捕获性(如果你愿意的话)?特别是,我可以看看"gcc_except_tab"部分及其可爱的LSDA、符号表或其他部分,并推断出符号可见性的任何问题或与捕获异常相关的其他问题吗?

我确实在网上找到了一个来源,声称有一个使用鸡、七条老鼠尾巴和粒子加速器的解决方案,但我想我应该先试试StackOverflow,把黑魔法作为最后的手段。

(我在OSX 10.6.7上运行i686-apple-darwin10-g++-4.2.1)

您正在抛出一个临时对象,因此应该使用catch( Core::Error const& e )

最新更新