MFC SetTitle()导致奇怪的调试断言

时间:2015-06-10 12:55:04

标签: c++ visual-studio-2010 debugging mfc

每当我在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

提前致谢。

0 个答案:

没有答案