Release 版本下 报debug assertion failed错误

wgggkgd 2012-09-05 09:45:15
1、dll的编译环境为release模式,但运行期会有debug assertion failed错误,是release模式为配置好?若是则该如何修改配置
2、debug assertion failed报的错误为wingdi.cpp 文件中 1114行断言失败,该断言为MFC中实现那些函数会调用
...全文
405 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
向立天 2013-03-18
  • 打赏
  • 举报
回复
您好
我是本版版主
此帖已多日无人关注
请您及时结帖
如您认为问题没有解决可按无满意结帖处理
另外本版设置了疑难问题汇总帖
并已在版面置顶
相关规定其帖子中有说明
您可以根据规定提交您帖子的链接
如您目前不想结帖只需回帖说明
我们会删除此结帖通知

见此回复三日内无回应
我们将强制结帖
相关规定详见界面界面版关于版主结帖工作的具体办法
wgggkgd 2012-09-05
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 的回复:]

那就是断言失败,把这句删了,换成if处理
[/Quote]
这个我能随便改?
wgggkgd 2012-09-05
  • 打赏
  • 举报
回复
这个就不知道了,我们是在第三方框架上进行开发的
有判断dll、exe是debug还是release发布的方法么
franzhong 2012-09-05
  • 打赏
  • 举报
回复
那就是断言失败,把这句删了,换成if处理
快乐鹦鹉 2012-09-05
  • 打赏
  • 举报
回复
那是否还有其它动态库之类的是debug版本?
wgggkgd 2012-09-05
  • 打赏
  • 举报
回复
Release模式,
报的错误确实为wingdi.cpp 文件中 1114行
快乐鹦鹉 2012-09-05
  • 打赏
  • 举报
回复
应该不是这个动态库报的错吧。你动态库所在的运行环境是debug的?
wgggkgd 2012-09-05
  • 打赏
  • 举报
回复
项目太大,现在还没有必现该问题的方法
只能重新检查有可能使用页面的析构了


该断言失败如下
CGdiObject* PASCAL CGdiObject::FromHandle(HGDIOBJ h)
{
CHandleMap* pMap = afxMapHGDIOBJ(TRUE); //create map if not exist
ASSERT(pMap != NULL);
CGdiObject* pObject = (CGdiObject*)pMap->FromHandle(h);
ASSERT(pObject == NULL || pObject->m_hObject == h); //这里为1114行
return pObject;
}
看不见的裂痕 2012-09-05
  • 打赏
  • 举报
回复
碰到过2次这种情况,都是指针没管理好(重复释放,有些控件会自动帮你释放new的指针内存),奇怪的是DEBUG竟然运行正常。

解决方法:
1.检查页面析构的地方
2.用Release版本调试,把代码优化去掉,把内容输出勾上
excelle_ICT 2012-09-05
  • 打赏
  • 举报
回复
这种情况,通常不是当前调试模块中产生的。
很可能是调试的程序中,包含了很多DLL,以及外部控件。其中有部分是采用debug模式编译的。又很不幸的,刚好到了错误的地方。
一般来说,release模块的调试,所有的模块也应该都是release,否则会有意想不到的错误。

到了错误的地方,可以点重试,看看call stack,找到最上面不是系统DLL的模块,估计就是那儿错了。
wgggkgd 2012-09-05
  • 打赏
  • 举报
回复
代码太多了,完全没有办法贴的
Eleven 2012-09-05
  • 打赏
  • 举报
回复
把你的代码贴出来看看~
Eleven 2012-09-05
  • 打赏
  • 举报
回复
你Debug下call stack,看函数调用堆栈,找到出错的函数先~
wgggkgd 2012-09-05
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 的回复:]

你那行代码发上来看看。之前有猛人直接把源码修改的。呵呵
[/Quote]
概率复现,所以不能确定在我的代码中何处
wingdi.cpp 1114行如下
该断言失败如下
CGdiObject* PASCAL CGdiObject::FromHandle(HGDIOBJ h)
{
CHandleMap* pMap = afxMapHGDIOBJ(TRUE); //create map if not exist
ASSERT(pMap != NULL);
CGdiObject* pObject = (CGdiObject*)pMap->FromHandle(h);
ASSERT(pObject == NULL || pObject->m_hObject == h); //这里为1114行
return pObject;
}
看不见的裂痕 2012-09-05
  • 打赏
  • 举报
回复
你那行代码发上来看看。之前有猛人直接把源码修改的。呵呵

15,981

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧