确定应用程序崩溃的确切位置
Identify exact line on which application got crashed?
如何确定我的应用程序崩溃的确切程序行?有没有什么工具告诉我哪个源文件中的哪一行使应用程序崩溃了?
我正在使用C/c++, MFC和vc++。
使用gdb查看应用程序崩溃的位置。对于linux,使用gdb --args (Application command line)
使用断点进入不同的函数。如果遇到崩溃,请使用bt来回溯代码。
对于运行时(非调试器附加)异常,我喜欢使用"BOOST_EXCEPTIONS",因为BOOST_THROW_EXCEPTION宏将BOOST_CURRENT_FUNCTION, FILE和LINE附加到异常。
但是最好的方法是在调试模式下编译并附带调试器运行。如果你正在使用visual studio(你可能已经在使用vc++了),切换到调试模式并运行它。当抛出一个未处理的异常时,它应该把你带到那里。
如果你想捕获处理过的异常,从菜单栏,Debug-> exceptions。检查所有这些将使异常被调试器捕获,即使它们已被处理。尽管人们在非致命错误中使用异常会让人非常讨厌…
这在很大程度上取决于你所说的"崩溃"是什么意思。但是假设你的意思是在你的应用程序中发生了一个异常,那么EXCEPTION_RECORD
结构将包含异常发生的确切地址,换句话说,当异常被引发时执行的IP。在Windows c++异常使用SEH。阅读永恒的Win32™结构化异常处理深度速成课程来理解SEH。
您可以从崩溃转储中检索异常信息(参见ecxr
显示异常上下文记录),或者您可以指示调试器在异常时中断。当系统崩溃时,沃森医生会为您创建转储文件。
相关文章:
- 当回溯以零开始时,如何调试崩溃
- 将值指定给向量(2D)的向量中的某个位置
- 使用Unreal C++获取VR耳机的世界位置/方向
- 写入位置0x0000000C时发生访问冲突
- 内联映射初始化的动态atexit析构函数崩溃
- 执行函数时导致崩溃的变量
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- 程序崩溃并显示"std::out_of_range"错误
- GL_SHADERSTORAGE_BUFFER位置是否与其他着色器位置冲突
- 使用向量的函数崩溃,调试器说访问冲突读取位置
- 程序的守护程序版本崩溃时的查找位置
- 如何找到检测到 Cuda API 错误时程序崩溃的位置:cudaMemcpy 返回 (0xb)
- 确保程序在运行时出错时在 C++/fortran 中的适当位置崩溃
- MEMCPY 后崩溃:访问冲突读取位置
- 使用"CS:EIP 上的字节数"找出崩溃发生的位置
- 确定应用程序崩溃的确切位置
- 调用MiniDumpWriteDump()以捕获崩溃的最佳位置
- 如何轻松地找出程序崩溃的位置和原因
- 通过WinAPI套接字连接到蓝牙设备时崩溃(读取位置0x00000004时发生访问冲突)
- PageHeap 不显示确切的崩溃位置