免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 11227 | 回复: 9
打印 上一主题 下一主题

vc2005 debug模式,运行时候出错debug assertion failed [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-09-04 15:58 |只看该作者 |倒序浏览
报错说在
D:\Program Files\Microsoft Visual Studio 8\VC\include\xstring
line 173
气死了,这是个什么东西啊,关我什么事啊
我的程序根本就没用它

能不能想办法把这个assertion禁掉啊
普通的assert 可以#define NDEBUG禁掉的,这个有没有办法?

论坛徽章:
0
2 [报告]
发表于 2008-09-04 17:58 |只看该作者
只想着逃避问题而不是解决问题

以调试模式运行,遇到断言失败中断定位到断言失败的地方,再查看函数调用栈,找到自己程序中出错的地方,然后分析错误解决之

论坛徽章:
0
3 [报告]
发表于 2008-09-04 18:03 |只看该作者
在缺省情况下,assertion在运行时是被禁用的,可以通过
开关-ea和-da来打开和关闭assertion的应用

论坛徽章:
0
4 [报告]
发表于 2008-09-04 19:53 |只看该作者
原帖由 tyc611 于 2008-9-4 17:58 发表
只想着逃避问题而不是解决问题

以调试模式运行,遇到断言失败中断定位到断言失败的地方,再查看函数调用栈,找到自己程序中出错的地方,然后分析错误解决之


唉,我的程序是没有错的,标准的C++ STL,在GCC下编译运行的好好的
现在到vc下就不行了,出错在一个vector的iterator的遍历的时候
运行的时候跳出来,报了很长的一大串,错误信息基本不可读

D:\Program Files\Microsoft Visual Studio 8\VC\include\xstring这个程序我看了,嵌套很深的,要想彻底看清楚很费时间的。
据说vc对stl的支持不好,如果问题是出在这里那还是不要多花精力了,禁掉,在release版本不出错就算成功,还出错的话只有放弃了。我不愿意放弃stl。

论坛徽章:
0
5 [报告]
发表于 2008-09-04 19:53 |只看该作者
原帖由 qliu00 于 2008-9-4 18:03 发表
在缺省情况下,assertion在运行时是被禁用的,可以通过
开关-ea和-da来打开和关闭assertion的应用


好的,多谢,我去试试。

论坛徽章:
0
6 [报告]
发表于 2008-09-04 21:22 |只看该作者
原帖由 wishel 于 2008-9-4 19:53 发表


唉,我的程序是没有错的,标准的C++ STL,在GCC下编译运行的好好的
现在到vc下就不行了,出错在一个vector的iterator的遍历的时候
运行的时候跳出来,报了很长的一大串,错误信息基本不可读

D:\Progra ...

从VC8开始,VC的STL库引入了Checked Iterator,能够检查一些程序错误,但VC8里的Checked Iterator存在一个严重的Bug(请点击),VC9已修正此Bug
建议你用VC9确认一下到底是谁的问题

另外,你可以添加编译选项/D"_SECURE_SCL=0"来禁用Checked Iterator

论坛徽章:
0
7 [报告]
发表于 2008-09-05 12:47 |只看该作者
这个问题找到原因了,是我的程序写的不够严谨
原来是
        string temp1("asdwefdf");
        wstring temp2;
        copy (temp1.begin(), temp1.end(), temp2.begin());
查了一下,copy不能用于安插新元素。改成:
        string temp1("asdwefdf");
        wstring temp2(temp1.begin(), temp1.end());
就可以了。

但是还有一个问题没解决,我程序里用了OTL访问数据库,多线程的时候出现问题,每个线程只要新建一个otl_stream,还没有进行真正的查询,就会报错。例如:
otl_stream i(1, "select * from t_usr where UsrID = :f1<int>",db);
这条句多线程一起执行就会报错:
Debug Assertion Failed!
Program:...
File: d:\Program Files\Microsoft Visual Studio 8\VC\include\xtree
Line: 370

Expression: map/set iterator not incrementable

这个比较麻烦。OTL里面都是模板,和VC的STL实现不知道会不会有什么冲突。
在GCC下运行很正常。

论坛徽章:
0
8 [报告]
发表于 2008-09-05 18:37 |只看该作者
原帖由 wishel 于 2008-9-5 12:47 发表
这个问题找到原因了,是我的程序写的不够严谨
原来是
        string temp1("asdwefdf");
        wstring temp2;
        copy (temp1.begin(), temp1.end(), temp2.begin());
查了一下,copy不能用于安插新元素。改成:
        str ...

见2楼回复第二句

PS,为什么每次遇到这种错误不去调试呢,点几下鼠标就能定位到自己代码出错的地方也不愿意做么?

论坛徽章:
0
9 [报告]
发表于 2008-09-05 21:57 |只看该作者
原帖由 tyc611 于 2008-9-5 18:37 发表

见2楼回复第二句

PS,为什么每次遇到这种错误不去调试呢,点几下鼠标就能定位到自己代码出错的地方也不愿意做么?


唉。。实在是不好意思,不会调试啊
我一般都是在程序中加入打印语句,一步步的找到问题点的,调试工具没用过

论坛徽章:
0
10 [报告]
发表于 2008-09-05 22:05 |只看该作者
不过在release状态没事了,一直运行没问题,至少能给老板交差了:wink: 。我是刚接触VC,有好多地方一下子弄不明白,慢慢来吧。多谢指教啊!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP