有一个函数在Debug环境下调试不能通过,在Release环境下却能正常调试通过。这是为什么,请执教!
有一个函数在Debug环境下调试不能通过,在Release环境下却能正常调试通过。这是为什么,请执教! 问题点数:50、回复次数:9Top
1 楼becool3000(蓝色冰点)回复于 2005-08-01 17:55:51 得分 5
呵呵!这样的情况是一直有的
帮你顶拉~~~Top
2 楼newbiestar()回复于 2005-08-01 18:00:35 得分 10
Debug模式下面会插入某些代码检测你的编码时候的错误,但是Release模式下面不会插入这些代码
这些代码中某些是检测你的隐藏的比较深的错误的,有错误的话就会告诉你并且停止你的程序的运行。Top
3 楼goodboyws(深夜不眠者(VCMVP))回复于 2005-08-01 18:16:54 得分 5
m_hWnd == NULL
类似的问题Top
4 楼JackyRenwuyou(地狱火)回复于 2005-08-01 18:48:02 得分 5
在Debug下出现的bug,在Release下一定会出现的,只是在Release下出现问题的几率而已。由于Debug的Runtime Library加强了错误检查,所以在Debug下表现出来了。一般是堆内存分配上的问题。一般的错误是由于Release的优化引起的可能性比较大。Top
5 楼exJeff(恋恋风尘)回复于 2005-08-01 18:50:48 得分 0
我今天也遇到这样一个问题,是STREX.cpp文件里的一个断言.
if (nFirst == 0 && nFirst + nCount == GetData()->nDataLength)
所属函数:
CString CString::Mid(int nFirst, int nCount) const
{
// out-of-bounds requests return sensible things
if (nFirst < 0)
nFirst = 0;
if (nCount < 0)
nCount = 0;
if (nFirst + nCount > GetData()->nDataLength)
nCount = GetData()->nDataLength - nFirst;
if (nFirst > GetData()->nDataLength)
nCount = 0;
ASSERT(nFirst >= 0);
ASSERT(nFirst + nCount <= GetData()->nDataLength);
// optimize case of returning entire string
if (nFirst == 0 && nFirst + nCount == GetData()->nDataLength)
return *this;
CString dest;
AllocCopy(dest, nCount, nFirst, 0);
return dest;
}
只知道操作越界了,但因为看不懂汇编代码,还是没搞明白.
Top
6 楼DentistryDoctor(不在无聊中无奈,就在沉默中变态)回复于 2005-08-02 12:55:34 得分 10
通过了又能说明什么问题呢?代码还是有问题的
比如变化初始化,ASSERT断言,对缓冲的越界访问,访问约定等都会带来DEBUG与Release的行为不完全一样。
首先应该确保DEBUG版本通过。Top
7 楼lixiaosan(小三)回复于 2005-08-02 13:04:48 得分 10
检查
数组越界,指针初始化,内存泄漏等都会引起问题.Top
8 楼blackt(Bjarne Stroustrup)回复于 2005-08-02 13:15:33 得分 3
markTop
9 楼idAnts(此广告位招租)回复于 2005-08-02 13:48:18 得分 2
debug是什么原因不过?Top




