我工作的軟件(使用C++編寫)目前存在堆損壞問題。我們的性能測試團隊在登錄到盒子的用戶數量達到某個閾值時仍然會收到WER錯誤,但他們給我的轉儲只是在不明顯的區域顯示損壞(例如,當std :: string釋放它的基礎內存時) 。查找只發生在性能測試下的堆損壞的最佳方式是什麼?
我試過使用AppApprifier,這確實引發了一些我現在修復的問題。然而,我現在處於這樣一種情況,即測試人員可以儘可能多地使用AppApprifier加載機器,並且運行乾淨,但在沒有AppApprifier的情況下運行時仍然會發生堆損壞(我想因爲他們可以在沒有其他用戶的情況下獲得更多用戶)。這意味着我一直無法獲得實際顯示問題的轉儲。
有沒有人有任何其他的想法,我可以使用有用的技術或技術?我已經做了儘可能多的分析,因爲我可以在堆腐敗轉儲沒有appverifier,但我看不到任何常見的主題。沒有任何線程在崩潰的同時做任何事情,而且崩潰的線程是無辜的,這使我認爲腐敗發生在前一段時間。
任何機會,你的代碼是否可移植到* nix上?如果是這樣,啓動'valgrind'(或在Windows上找到類似的工具):通常第一個抱怨「無效讀取」或「無效寫入」是一個很好的暗示,因爲真正的錯誤在哪裏。 – ereOn
啊,只要它是:-)我以前用過valgrind,它是一個很好的工具。 Appverifier通常也很方便,但在這種情況下,它並不適用於我:-( – Benj
在另一個(有點類似)的問題上,我建議將電子圍欄移植到Windows上,它會在無數內存錯誤中故意對段進行故障排序,但我很不確定http://code.google.com/p/electric-fence-win32/ –