c++ - 如何调试未知代码中的异常?

标签 c++ debugging exception assembly

我有一个使用外部库的程序。其中一个库(负责相机硬件)启动一个线程并意外崩溃。有时每 2 分钟一次,有时不持续一个小时。没有明显的触发因素。异常未被线程捕获,这导致应用程序终止。 :(

幸运的是,当 kernel32.dll 中的 RaiseException() 函数引发异常时,我可以停止应用程序。调用堆栈上没有其他函数,我知道它们的用途。

调试器告诉我,这是一个 std::bad_alloc 异常。调试器怎么知道的?我能以某种方式获得有关异常的更多信息吗?如有必要,我会查看反汇编,但我不知道从哪里获取信息。

我正在使用 Visual Studio C++ 2010,非常熟悉汇编器并对 WINAPI 有一些了解。我们想尽快发布这个软件,这个错误必须消失。

最佳答案

请改用 Windbg,它是一个核心调试器,不会隐藏任何内容并“按原样”公开内容。使用 sxe 语法启用所需的异常(Windgb 将启用在任何 SEH 类型处中断,而不仅仅是 C++)。 Windbg 还明确区分了第一次机会异常和第二次机会异常。然后您应该弄清楚这是引发的 C++ 异常还是更基本的 SEH 类型,例如 AV。

关于c++ - 如何调试未知代码中的异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12059007/

相关文章:

c++ - 使用 ROS 设置 VScode 并自动完成

c++ - 通用正则表达式变音解决方案?

r - R Markdown中的调试代码

java - 错误的 ELF 类 : ELFCLASS32 (Possible cause: architecture word width mismatch)

c++ - 获取实际不存在的进程加载模块

c++ - 从 2D 混合数组和 vector 中释放内存

java - 如何在 eclipse Luna 中调试 JBoss 7.1 应用程序

c++ - Clion 中调试和运行模式之间奇怪的不同结果

java - 什么是堆栈溢出错误?

java - 访问自定义异常中的字段时出现问题