如何解决VS2017:调试断言失败显示在输出中,但没有获得带有中止的 MessageBox,重试忽略?
拥有一个使用 MFC DLL 的 VS2017 MFC x64 .EXE,并在关闭应用程序时获得断言。通常会出现一个带有中止、重试、忽略选项的消息框。在这种情况下什么都没有,只是:
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):
CWorkSpaceBar::~CWorkSpaceBar()
{
// clean up checkbox state imagelist
CImageList *pimglist=m_wndTree.SetImageList(NULL,TVSIL_STATE);
if (pimglist) {
pimglist->DeleteImageList();
}
}
但我希望出现该框,以便我可以单击“重试”来突破它。如果我在行上设置断点,它会中断但 F11 不会跟随它。我发现它只有在我静态链接 MFC 库时才有效。
我在哪里可以找到消息框不显示的原因,以及在非静态链接时是否有办法单步执行 MFC 代码?
谢谢。
解决方法
调试断言的行为是通过 _CrtSetReportMode 函数控制的。默认情况下,失败的调试断言被定向到对话框 (_CRTDBG_MODE_WNDW
)。
您的应用程序似乎(直接或间接)将设置更改为 _CRTDBG_MODE_DEBUG
。这在 CI 设置中很有用,可以在不需要用户交互的情况下收集尽可能多的诊断输入。
如果您想显示调试对话框,请确保使用
_CrtSetReportMode( _CRT_ASSERT,_CRTDBG_MODE_WNDW );
并且不要改变它。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。