作者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