我正在调试一个应用程序,由于某种原因(我不太确定),在关闭我的应用程序时abort()
被调用。我想尝试找出原因,所以我想放置一个断点,abort()
这样我就可以看到堆栈跟踪,并希望发现它被调用的原因,而不是优雅的退出。
我正在使用 Microsoft Visual Studio 2012 (Update 3) 并且只有abort()
函数的声明 (in stdlib.h
),所以我无法设置断点。有没有办法解决这个问题?
我正在调试一个应用程序,由于某种原因(我不太确定),在关闭我的应用程序时abort()
被调用。我想尝试找出原因,所以我想放置一个断点,abort()
这样我就可以看到堆栈跟踪,并希望发现它被调用的原因,而不是优雅的退出。
我正在使用 Microsoft Visual Studio 2012 (Update 3) 并且只有abort()
函数的声明 (in stdlib.h
),所以我无法设置断点。有没有办法解决这个问题?
你不需要做任何特别的事情。abort
从 Visual Studio 构建的 C/C++ 程序调用会产生以下消息:
-------------------------- Microsoft Visual C++ 调试库 -------------------------- 调试错误! 程序: ... R6010 - abort() 已被调用 (按重试调试应用程序) -------------------------- 中止 重试 忽略 --------------------------
按重试打开带有完整调用堆栈的调试器。当程序在独立模式和调试器下运行时,此功能可用于调试和发布配置。在发布配置中,对话框不同,它包含打开调试器的中断按钮,如调试配置中的重试。
我遇到了同样的问题,发现这个答案对我有用:按 CTRL+B 并在文本字段中输入“中止”。
只是为了调试,你可以覆盖abort
函数并在里面设置一个断点。
void abort()
{
std::cout << "aborting" << std::endl; // put break here...
exit(-1);
}
在 linux 的情况下gdb
,点击后abort
,您可以使用命令轻松查看堆栈跟踪bt
。无需添加额外的断点。