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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了未捕获的异常 - 调试技术(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 )

以上是关于未捕获的异常 - 调试技术(C ++)的主要内容,如果未能解决你的问题,请参考以下文章

启用“仅我的代码”时,Visual Studio 2015 JavaScript 调试不会捕获未处理的异常

VS2010 F5调试时出现:“ 尝试运行项目时出错:未捕获通过反射调用的方法引发的异常”解决

c++ 未处理的异常 - 如何调试

C++ MSVC - 显示未捕获的异常消息

C语言程序假死(不工作),求调试方法

qt的程序异常退出 求救