c++ - 未捕获的异常——调试技巧(C++)

标签 c++ debugging exception gdb mach-o

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

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

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

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

所以我的问题是:

  1. 我可以使用哪些调试工具和/或技术来窥视异常处理过程的黑匣子?我可以用 gdb 单步执行它吗?

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

我确实找到了一个在线资源,声称可以使用一只鸡、七只老鼠尾部和一个粒子加速器来解决这个问题,但我认为我会先尝试 StackOverflow,并将黑魔法作为最后的手段。

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

最佳答案

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

关于c++ - 未捕获的异常——调试技巧(C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6145230/

相关文章:

c++ - Eclipse项目运行问题

java - 如果可能的话,如何限制在控制台中打印通用异常消息?

c++ - 用于拟合具有两条线的曲线的亚二次算法

c++ - Windows MSG 结构与遗留项目代码结构 MSG 冲突

python - 使用pdb调试Python时如何打印所有变量值,而不指定每个变量?

python - 捕获停止执行我的 Python 脚本的错误

delphi - 从 Delphi 2006 升级到 Delphi XE 后关闭应用程序时出现无效指针异常

c++ - 找出是否在 C++ 项目中调用了函数?

c++ - 返回引用后数据被删除

XCode 在调试时自动删除 plist