Visual Studio 2013项目:调试断言失败

时间:2014-07-18 11:55:42

标签: debugging visual-studio-2013 assertion

我已经在Visual Studio项目(C ++)上工作了几个星期,今天早上我遇到了调试错误,这些错误阻止了可执行文件的启动。编译器和链接器似乎都在做一个干净的工作。 但是,我有一个Debug Assertion Failure,而这个似乎涉及的文件位于基础类目录中,它被称为dlgdata.cpp。在此代码段(调试器指向的)

中失败的ASSERT(FALSE)语句
HWND CDataExchange::PrepareCtrl(int nIDC)
{
ASSERT(nIDC != 0);
ASSERT(nIDC != -1); // not allowed
HWND hWndCtrl;
COleControlSite* pSite = NULL;
m_pDlgWnd->GetDlgItem(nIDC, &hWndCtrl);
if (hWndCtrl == NULL)
{
    // Could be a windowless OCX
    pSite = m_pDlgWnd->GetOleControlSite(nIDC);
    if (pSite == NULL)
    {
        TRACE(traceAppMsg, 0, "Error: no data exchange control with ID 0x%04X.\n",        nIDC);
        ASSERT(FALSE); // that is the one 
        AfxThrowNotSupportedException();
    }

在创建一个显示控件变量值的框时,我不确定如何创建它。当我忽略失败并继续调试时,这会触发断点并将我带到winocc.cpp,并再次突出显示ASSERT语句。

BOOL CWnd::EnableWindow(BOOL bEnable)
{
ASSERT(::IsWindow(m_hWnd) || (m_pCtrlSite != NULL));

if (m_pCtrlSite == NULL)
    return ::EnableWindow(m_hWnd, bEnable);
else
    return m_pCtrlSite->EnableWindow(bEnable);
}

我可能会回到备份中,但这需要几个小时的工作时间,而且我有兴趣知道如何解决这些问题。它们应该再次发生吗? 干杯,M。

1 个答案:

答案 0 :(得分:0)

如果您在不使用向导的情况下对控件进行手动编码,则可能会遗漏实例化控件类的代码。 MFC消息告诉您控件无效。跟踪消息将告诉您对控件的资源ID的期望。确保您在对话框资源中指定的内容。