【发布时间】:2011-02-16 16:08:23
【问题描述】:
我正在 VS2008 上编写一个 C++ MFC 程序,当我第一次运行该程序时有时会遇到这个“调试断言错误”。当我尝试调试它时,它会将我带到这个 winhand.cpp 文件,它不是我编写的程序的一部分,所以我不确定如何调试它。
将错误带到winhand.cpp中的这个地方
CObject* pTemp = LookupTemporary(h);
if (pTemp != NULL)
{
// temporary objects must have correct handle values
HANDLE* ph = (HANDLE*)((BYTE*)pTemp + m_nOffset); // after CObject
ASSERT(ph[0] == h || ph[0] == NULL);
if (m_nHandles == 2)
ASSERT(ph[1] == h);
}
那么为什么会发生这个错误呢?为什么它只是偶尔发生(50% 的时间)?我该如何调试呢?
如果需要,我会提供一些代码。
谢谢!
【问题讨论】:
-
HANDLE* ph = (HANDLE*)((BYTE*)pTemp + m_nOffset);从对象中提取句柄似乎是一种不寻常的方式。你为什么这样做? LookUpTemporary() 返回什么?
-
嗨安德斯,我不知道。这些代码不是我写的,它不是我程序的一部分。但这就是 VS2008 调试带我去的地方。
-
OIC,你可能需要开始注释掉你的原始代码,看看你的代码是什么导致了这个。
-
那里有两个 ASSERT。哪一个在断言?如果是第一个,ph[0] 的值是多少?如果是第二个,h 和 ph[1] 的值是多少?报告十进制和十六进制值。
标签: c++ visual-studio-2008 mfc debugging