免费注册 查看新帖 |

Chinaunix

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

郁闷了2、3天的BUG——数组越界 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-12-10 15:37 |只看该作者 |倒序浏览
Author:wmmwang(unc,王敏敏)
Enviroment:fedora8.0
CrossCompile:arm-linux-gcc3.4.1
Minigui:1.3.3
Date:2008.12.10
摘要:
    三天前,给自己的多线程程序为保护共享引入了信号量机制,一天之后程序出现问题。
现象:
    程序没有崩溃,还在运行,像是等待信号量导致生产者线程阻塞。
排查:
    1.在怀疑阻塞的线程里sem_wait()前后printf,果然只有sem_wait()前的结果出来,之后的就不出来了;
    2.初始给信号量2个资源,发现还是如此问题,不够?那再给,给你10个资源!晕,问题照旧;
    3.尝试使用sem_trywait(),结果发现还是sem_trywait()之前的printf有出来,之后的还是不出来,奇了怪了,sem_trywait()不会阻塞线程的,咋后面的那个printf还不出来??莫非信号量那个地方被恶意修改了?
    4.把生产者线程生产的个数显示出来,每次sem_wait()准备就将次数++,结果发现,生产的次数并不是我希望的次数,实际的次数多了!!!
      那就问题来了,生产的东西放在数组里的,这不就是数组越界了嘛!!!而信号量的定义就在数组下面,那岂不是maybe把我的信号量恶意改写?SHIT!
    5.检查程序,发现一个地方笔误,改完,OK!
总结:
   这次调试首先感谢杨普杰同学帮忙,给了一个晚上的全力帮助。
   分析问题的时候,思路要清晰,不要慌,不要瞎调,不然花了时间也调不出来,清晰的思路很重要。
   还有,发现问题的时候想用调试工具去找内存泄露所在地方的,结果这个工具没发现我程序内存泄露,可能工具做的还不是很完善!所以,最终,还是要靠自己!
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/46715/showart_1712687.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP