每当我在MFC应用程序中调用SetTitle()时,我的调试断言都失败了。但我还没有打断任何东西;事实上,我不确定如何解释发生了什么。
我实际上得到了三个调试断言,它们在应用程序继续之前连续循环了大约十几次。如果我一直点击“忽略”,那么在大约20次点击后,这些框就会消失,并且应用程序将继续正常运行。
前两个断言是从wincore.cpp行952和954抛出的。代码区域是:
else if (m_hWnd == HWND_NOTOPMOST)
ASSERT(this == &CWnd::wndNoTopMost);
else
{
// should be a normal window
ASSERT(::IsWindow(m_hWnd));
// should also be in the permanent or temporary handle map
CHandleMap* pMap = afxMapHWND();
ASSERT(pMap != NULL);
CObject* p=NULL;
if(pMap)
{
ASSERT( (p = pMap->LookupPermanent(m_hWnd)) != NULL ||
(p = pMap->LookupTemporary(m_hWnd)) != NULL);
}
ASSERT((CWnd*)p == this); // must be us
第三个断言是从dbgrptt.c,第85行抛出的。违规的代码片段是:
_CRTIMP void _cdecl _CrtDbgBreak(
void
)
{
__debugbreak();
}
(它正在__debugbreak()函数中破解。)
我不确定从哪里开始。我的调用堆栈在此处可见:http://s18.postimg.org/lhoz1rwqh/callstack.png
提前致谢。