【问题标题】:Visual Studio 2013 project: debug assertion failuresVisual Studio 2013 项目:调试断言失败
【发布时间】:2014-09-09 13:23:26
【问题描述】:

我已经在 Visual Studio 项目 (C++) 上工作了数周,今天早上我遇到了调试错误,导致可执行文件根本无法启动。编译器和链接器似乎都做得很好。 但是,我有一个调试断言失败,并且似乎涉及到的文件位于基础类目录中,它被称为 dlgdata.cpp。此代码中失败的 ASSERT (FALSE) 语句 sn-p(调试器指向)

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。

【问题讨论】:

    标签: debugging visual-studio-2013 assertion


    【解决方案1】:

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

    【讨论】:

    • 我想我正在了解正在发生的事情。我倾向于复制文本框(在主控制对话框上)并重新命名它们,以便它们的新名称对我有意义。当我尝试使用分配给这些控制框的控制变量时,这会使事情变得混乱。说:DDX_Control(pDX, IDC_STATIC_core_completed, m_aux_show_completed_C);如果我更改 IDC_STATIC_ 的名称...以前的名称仍存储在某处。我不确定具体在哪里。也许这是 Resource.h?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 2016-04-21
    • 1970-01-01
    • 2016-02-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多