如何确定应用程序崩溃的确切程序行?有没有工具告诉我哪个源文件崩溃了应用程序?
我正在使用C / C ++,MFC和VC ++。
答案 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将为您创建转储。