2012-08-01 142 views
2

我試圖找出應用程序中的崩潰。崩潰發生在壓力測試。在發生崩潰時,VIRT約爲19 Gigs,RES爲2.1 Gigs。這是爲了提到該系統具有3G的物理內存和5G的交換空間。爲什麼堆棧結束爲空?

在應用程序崩潰的情況下,即使加載了正確的符號,核心轉儲也不會在堆棧strace中給出任何符號。但我注意到一個奇怪的行爲,調用堆棧的底部爲空。

(gdb) bt 
#0 0x00002adaea9df74d in ??() 
#1 0x00002aacc94ff700 in ??() 
#2 0x00000000004f9023 in ??() 
#3 0x00002aae2b8054e0 in ??() 
#4 0x00002aae6d9420a0 in ??() 
#5 0x00002aacc94ff700 in ??() 
#6 0x0000000000486312 in ??() 
#7 0x00002aae2b8054e0 in ??() 
#8 0x00002aacc94ff700 in ??() 
#9 0x00002aacc94ff440 in ??() 
#10 0x00002aae6d9420a0 in ??() 
#11 0x0000000000000000 in ??() 

這可能是什麼原因造成的?是否因爲堆棧損壞?

+0

如果您用某些涉及的技術來標記您的問題可能會有幫助 - 例如,編程語言,操作系統等。 – 2012-08-01 07:17:56

+0

好的,我會做。 :)。但是當人們爲相同類型的問題移除編程語言標記時,我有過去的歷史。 – 2012-08-01 07:21:50

+2

@RituparnaKashyap他們會刪除標籤,如果他們沒有意義。例如,你的程序是C++ **還是** C? – juanchopanza 2012-08-01 07:24:07

回答

2

最有可能的選擇是有些東西會拋出你的調用棧:這可以解釋爲什麼你的調試器顯示垃圾以及爲什麼你的應用程序崩潰。我建議嘗試在valgrind下運行您的代碼。

+0

我們使用低負載進行valgrind測試。一切安好。我們在重負荷下遇到這種情況,運行2-3天后也會發生這種情況。如果我們對valgrind進行相同的描述,那麼需要很長時間才能獲得測試用例。 – 2012-08-01 08:03:05

+0

無論如何,我們會嘗試它。除此之外還有其他/ OS參數,我們可以監控。 – 2012-08-01 08:07:14

+0

您的編譯器可能有加固/安全選項來保護堆棧,該堆棧應該會在調用堆棧的地方使應用程序出現段錯誤。這可以幫助你調試這個。 – 2012-08-01 08:32:37