在调用 abort() 时设置断点

Setting a breakpoint on calling abort()

本文关键字:设置 断点 调用 abort      更新时间:2023-10-16

我正在调试一个应用程序,出于某种原因(我不太确定),关闭应用程序时调用了abort()。我想尝试找到造成这种情况的原因,所以我想在abort()上放置一个断点,以便我可以看到堆栈跟踪,并希望发现调用它而不是优雅退出的原因。

我使用的是Microsoft Visual Studio 2012(更新 3),并且只有 abort() 函数的声明(在 stdlib.h 中),因此无法设置断点。有什么办法可以解决这个问题吗?

你不需要做任何特别的事情。 abort来自 Visual Studio 构建的 C/C++ 程序的调用将生成以下消息:

---------------------------Microsoft可视化C++调试库---------------------------调试错误!程序:。。。R6010- abort() 已被调用(按重试以调试应用程序)---------------------------中止重试忽略  ---------------------------

按重试将打开具有完整调用堆栈的调试器。当程序在独立模式下和调试器下运行时,此功能可用于调试和发布配置。在发布配置中,对话框是不同的,它包含"中断"按钮,用于打开调试器,如"调试配置中的重试"。

我遇到了同样的问题,并找到了这个对我有用的答案:按 CTRL+B 并在文本字段中输入"中止"。

仅用于调试,您可以覆盖abort函数并在内部设置断点。

void abort()
{
    std::cout << "aborting" << std::endl; // put break here...
    exit(-1);
}

在 linux gdb 的情况下,点击 abort 时,您可以轻松看到带有命令 bt 的堆栈跟踪。无需添加额外的断点。