调试和解决非常零星的崩溃的想法 - 似乎是一个AV

Rod*_*mez 2 c++ crash exception-handling c++builder access-violation

我有一个错误导致我的应用程序只是消失而没有错误消息或类似的东西.该应用程序刚刚从屏幕上消失,它不再列在任务管理器上.

该应用程序是一个C++ Builder应用程序(CBuilder2007),我已经尝试了所有我想到的尝试捕获此错误.它很少发生,它从未在我的机器上崩溃,只在我们在办公室的测试机器中崩溃过一次.对于我们的一个客户来说,它更频繁地发生,但我们还没有找到实现它的方法,或者找到发生这种情况的情况.这是一个沉重的多线程应用程序.

我在这个应用程序中启用了madExcept,但它没有捕获任何东西.我已经使用set_terminateset_unexpectedRTL例程添加了处理程序,没有任何运气.

我所拥有的唯一信息来自我所做的"加载器应用程序"包装器,以从主应用程序获取返回代码.它与C0000005代码一起退出,我认为这意味着发生了访问冲突.奇怪的是,如上所述,甚至没有Windows错误框或类似的东西.

问题是:任何试图抓住这个想法的想法?正如我甚至没有一个线索,其中这可能发生(我有很多周围的应用程序登录的,但"跟踪"应用程序崩溃之前还没有导致任何地方),我的想法与set_terminateset_unexpected程序是让一个堆栈跟踪,试图查看错误的生成位置,但到目前为止这些例程根本没有被调用(至少在我办公室这里发生过这种情况)

提前致谢


[Update 22.Sept.2009]使用AddVectoredHandlerException我能够从崩溃中获得一个callstack,现在我可以开始尝试隔离并修复bug.谢谢!!!

Cat*_*lus 6

terminate/ unexpected仅由C++运行时调用,仅用于C++异常.

访问冲突是一个SEH异常 - 为了捕获它,您需要SetUnhandledExceptionFilterAddVectoredExceptionHandler(如果它> = XP).然后,您可以使用MiniDumpWriteDump创建一个minidump .