确定应用程序崩溃的确切位置

Identify exact line on which application got crashed?

本文关键字:位置 崩溃 应用程序      更新时间:2023-10-16

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

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

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

使用断点进入不同的函数。如果遇到崩溃,请使用bt来回溯代码。

虽然gdb中有很多东西,但我的目的只是给出一个指针,您可以从哪里开始。

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

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

如果你想捕获处理过的异常,从菜单栏,Debug-> exceptions。检查所有这些将使异常被调试器捕获,即使它们已被处理。尽管人们在非致命错误中使用异常会让人非常讨厌…

这在很大程度上取决于你所说的"崩溃"是什么意思。但是假设你的意思是在你的应用程序中发生了一个异常,那么EXCEPTION_RECORD结构将包含异常发生的确切地址,换句话说,当异常被引发时执行的IP。在Windows c++异常使用SEH。阅读永恒的Win32™结构化异常处理深度速成课程来理解SEH。

您可以从崩溃转储中检索异常信息(参见ecxr显示异常上下文记录),或者您可以指示调试器在异常时中断。当系统崩溃时,沃森医生会为您创建转储文件。