2011年3月30日 星期三

當gdb遇到SIGKILL……

.

在ns的開發階段,執行時遇到segmentation fault是很正常的
這時gdb非常的好用
但若gdb沒法用呢?

之前用gdb debug時遇到一個case……
在戴入ns的script file後,系統會hang住,過了好一陣子後出現下列的error msg:

Program terminated with signal SIGKILL, Killed.
The program no longer exists.

然後就停了,怎樣都跑不起來
上網查了一下,也沒什麼好答案

在解問題的過程中,我有注意到,一旦開啟gdb並戴入ns的script file時,系統會變得很慢,用top看了一下,ns的mem%衝到了93%,然後virtual和res還一直在漲上去,這是怎麼一回事?ns怎會用到那麼大量的記憶體?


最後我找到了問題的所在,因為我變數initialize錯誤,導致某個class的constructor配置了巨量的變數
然後gdb為了追蹤程式,又要為ns allocate的變配置對應的變數以做追蹤的動作,顯然的,他配置的變數也不少,結果導致gdb一直一直在配置memory,然後超過os的界限,os送個kill的signal給gdb正在trace的程式(也就是ns),將他kill掉
我想,這應該是gdb無法追蹤的原因

所以,下一次若你也遇到相同的問題,可以查查看是哪裡配置了太多、太大的記憶體囉

.

沒有留言: