有一个使用MFC的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代码?
谢谢。
发布于 2021-01-31 17:30:47
调试断言的行为是通过_CrtSetReportMode函数控制的。默认情况下,失败的调试断言被定向到一个对话框(_CRTDBG_MODE_WNDW
)。
您的应用程序似乎(直接或间接)将设置更改为_CRTDBG_MODE_DEBUG
。这在CI设置中很有用,可以在不需要用户交互的情况下收集尽可能多的诊断输入。
如果希望显示调试对话框,请确保使用
_CrtSetReportMode( _CRT_ASSERT, _CRTDBG_MODE_WNDW );
并且不要让它改变。
https://stackoverflow.com/questions/65965940
复制相似问题