确定应用程序崩溃的确切行?

时间:2014-08-21 13:18:30

标签: c++ winapi visual-c++ mfc

如何确定应用程序崩溃的确切程序行?有没有工具告诉我哪个源文件崩溃了应用程序?

我正在使用C / C ++,MFC和VC ++。

3 个答案:

答案 0 :(得分:0)

使用gdb查看应用程序崩溃的位置。对于linux,请使用gdb --args (Application command line)

使用断点来进入各种功能。如果遇到崩溃,请使用bt来回溯代码。

虽然gdb中有很多东西,但我的目标是只提供指针,你可以从哪里开始。

答案 1 :(得分:0)

对于运行时(非调试器附加)异常,我喜欢使用“BOOST_EXCEPTIONS”,因为BOOST_THROW_EXCEPTION宏将BOOST_CURRENT_FUNCTION, FILE LINE 附加到异常。

但最好的方法是在调试模式下编译并运行附加的调试器。如果您正在使用visual studio(使用VC ++,您可能已经是),请转到调试模式并运行它。当抛出一个未处理的异常时,它会把你带到那里。

如果要捕获已处理的异常,请从菜单栏中选择Debug-> Exceptions。检查所有这些将使调试器捕获异常,即使它们被处理。虽然人们使用例外的非致命错误可以使这个超级恼人...

答案 2 :(得分:0)

这取决于“崩溃”的含义。但假设您的意思是在您的应用程序中发生异常,那么EXCEPTION_RECORD结构将包含发生异常的确切地址,换句话说,引发异常时执行的IP。在Windows C ++异常中使用SEH。阅读永恒的A Crash Course on the Depths of Win32™ Structured Exception Handling以了解SEH。

您可以从崩溃转储中检索异常信息(请参阅ecxr Display Exception Context Record),也可以指示调试器在异常时中断。发生崩溃时,Dr. Watso n将为您创建转储。