作者Trumen (真好多人)
看板EE_DSnP
标题Re: [问题] 在网页上程式crash了
时间Fri May 8 00:10:36 2009
※ 引述《ric2k1 (Ric)》之铭言:
: ※ 引述《Trumen (真好多人)》之铭言:
: : 自己的memtest在工作站跑run和ref跑的run显示的结果都一模一样
: : 可是搬到64-bit後就crash了 (在do1的时候)
: : 其他 do2 do3 do4 也是和ref一模一样
: : 以下是do1跑的结果:
: : Array list ---
: : sh: line 1: 8784 Segmentation fault ./memTest -f tests/do1 2>&1
: : 好像是在 mtnew 5 -a 3 时爆了,屡试不爽
: : 可是我实在不知道要怎麽检查,有请老师解惑了...
: : (奇怪的是其他do都可以跑的和ref一样,如果都不一样或许还让人明白一点..)
: 所以我说都没有人回答 1939 篇, 好桑新...
: 虽然你不能在我们的机器上使用 debugger, 但是你还是可以用 cout 大法,
: 或是 turn on debugging information, 或是...
: 想想看, 发挥一下创造力, 总是有办法的...
谢谢老师~~
我後来发现是因为当Free mem in last block: 52 时
要mtnew 5 -a 3
因为在64bit上array[3]要56bit,所以系统会重新要一个block
而剩下的52bit就要回收
但因为52不是8的倍数,所以回收时只能回收48byte
而且会Recycling to _recycleList[
2]
而我刚刚是回收到_recycleList[3]
然後array[3]在找空间时看到有回收的资源可以用,所以....就crash了
至於debug的方式
因为不能用ddd进去code冲撞,所以我在
有重要数据的地方用cout大法
然後把memMgr.h上方的
// #define MEM_DEBUG 的//拔掉
压缩後再重新放到网页上跑
如此一来就可以看出到底是哪里出问题了
另外还有一种debug的方式
就是丢老师水球,这招也是挺有效的,一丢见效
(前提是老师有空@@)
小弟在这里抛砖引玉,欢迎大家帮忙想一些更有创意的debug方式
在此谢谢老师也谢谢板上同学的热心帮忙!!
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.112.249.209
1F:推 ric2k1:谢分享! 05/08 00:15
2F:推 howardkan:酷~~跟你错一样XD 05/08 02:10
3F:推 icarusming:我也跟你错一样XD 05/08 02:53