C++ 在调用abort()时设置断点

C++ 在调用abort()时设置断点,c++,debugging,visual-studio-2012,breakpoints,abort,C++,Debugging,Visual Studio 2012,Breakpoints,Abort,我正在调试一个应用程序,由于某种原因(我不太确定),在关闭我的应用程序时调用了abort()。我想试着找出原因,所以我想在abort()上放置一个断点,这样我就可以看到堆栈跟踪,并希望找到调用它的原因,而不是一个优雅的退出 我正在使用Microsoft Visual Studio 2012(更新3),并且只有abort()函数的声明(在stdlib.h中),因此无法设置断点。有什么办法可以解决这个问题吗?你不需要做任何特别的事情中止调用Visual Studio生成的C/C++程序会生成以下消息

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


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

你不需要做任何特别的事情<代码>中止调用Visual Studio生成的C/C++程序会生成以下消息:

--------------------------- Microsoft Visual C++ Debug Library --------------------------- Debug Error! Program: ... R6010 - abort() has been called (Press Retry to debug the application) --------------------------- Abort Retry Ignore --------------------------- --------------------------- 微软Visual C++调试库 --------------------------- 调试错误! 节目:。。。 R6010 -已调用abort() (按“重试”调试应用程序) --------------------------- 中止重试忽略 ---------------------------
按“重试”打开具有完整调用堆栈的调试器。当程序在独立模式和调试器下运行时,此功能可用于调试和发布配置。在Release configuration(发布配置)中,该对话框不同,它包含“中断”按钮,可打开调试器,如调试配置中的“重试”。

仅用于调试,您可以覆盖
中止
函数并在其中设置断点

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

std::cout在linux
gdb
的情况下,点击
abort
,您可以很容易地看到使用命令
bt
的堆栈跟踪。无需添加额外的断点。

我遇到了同样的问题,找到了这个对我有效的答案:按CTRL+B,然后在文本字段中输入'abort'。

嘿,Alex,感谢您的回复,我确实收到了一封邮件Visual Studio中的
输出
调试框中有类似的消息,但是我没有得到一个带有
重试
按钮的对话框,我可以按下该按钮(我假设,因为此时我已经关闭了应用程序)?根据MSDN:
当应用程序与运行时库的调试版本链接时,abort会创建一个带有三个按钮的消息框:abort、Retry和Ignore
。在我的测试中,它起作用,要使用调试CRT版本构建,有以下选项:C/C++-代码生成-运行时库-多线程调试DLL.Hmm,我赢了如果这是我的特定代码的一个特点,那么,因为我使用多线程调试CRT运行它,并且我没有收到这样的消息框,我只会在
输出
框中看到一条跟踪消息(然后所有线程以返回值
3
退出)。我创建了一个新项目,其设置与
main()
函数中的
abort()
return 0;
语句完全相同。它的行为符合预期,但由于某些原因,不在我的项目中。Ctrl+D,N.键入“abort”对于函数名。@HansPassant,我必须使用Ctrl-B,但这很有效,非常感谢!问题是我没有正确处理一个线程,因此析构函数调用了
abort()
!!这是唯一一个对我有效的服务。我的热键与CTRL+B不同。但我只是通过“断点”窗口添加了它。