首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >VS2017:输出中显示调试断言失败,但未使用Abort获取MessageBox,是否重试忽略?

VS2017:输出中显示调试断言失败,但未使用Abort获取MessageBox,是否重试忽略?
EN

Stack Overflow用户
提问于 2021-01-30 16:14:24
回答 1查看 228关注 0票数 0

有一个使用MFC的VS2017 MFC x64 .EXE,并在关闭应用程序时获得一个断言。通常会出现一个消息框,其中包含中止、重试、忽略的选项。在这种情况下,什么都没有,只是:

代码语言:javascript
运行
复制
Debug Assertion Failed!

Program: C:\WINDOWS\SYSTEM32\mfc140ud.dll
File: d:\agent\_work\2\s\src\vctools\vc7libs\ship\atlmfc\include\afxcmn.inl
Line: 291

在输出窗口中,程序结束。

当我添加以下代码(它可能不像NULL)时,它就开始这么做了:

代码语言:javascript
运行
复制
CWorkSpaceBar::~CWorkSpaceBar()
{
  // clean up checkbox state imagelist
  CImageList *pimglist=m_wndTree.SetImageList(NULL, TVSIL_STATE);
  if (pimglist) {
    pimglist->DeleteImageList();
  }
}

但我希望弹出一个框,这样我就可以单击重试来突破它。如果我在一行上设置了一个断点,它就会断掉,但是F11不会跟随它。我发现只有当我静态链接MFC库时它才能工作。

我应该在哪里找出为什么消息框不显示,还有当不是静态链接时,是否有一种方法可以单步执行MFC代码?

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2021-01-31 17:30:47

调试断言的行为是通过_CrtSetReportMode函数控制的。默认情况下,失败的调试断言被定向到一个对话框(_CRTDBG_MODE_WNDW)。

您的应用程序似乎(直接或间接)将设置更改为_CRTDBG_MODE_DEBUG。这在CI设置中很有用,可以在不需要用户交互的情况下收集尽可能多的诊断输入。

如果希望显示调试对话框,请确保使用

代码语言:javascript
运行
复制
_CrtSetReportMode( _CRT_ASSERT, _CRTDBG_MODE_WNDW );

并且不要让它改变。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65965940

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档