如何在未知代码中调试异常?

时间:2012-08-21 16:13:55

标签: c++ debugging exception assembly

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

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

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

我正在使用Visual Studio C ++ 2010,熟悉汇编程序并对WINAPI有所了解。我们想尽快发布这个软件,这个bug必须消失。

1 个答案:

答案 0 :(得分:4)

使用Windbg代替,这是一个硬核调试器,它不会隐藏任何东西并且会暴露事物'因为它们是'。使用sxe语法启用所需的异常(Windgb将允许在任何SEH类型中断,而不仅仅是C ++)。 Windbg还明确区分了第一次机会异常和第二次机会异常。你应该弄清楚这是一个C ++异常被提升还是更基本的SEH类型,比如AV。