我試圖分析我的應用程序中發生掛起後從我的一個最終用戶收到的內存轉儲。這似乎與我的應用程序的音頻播放部分有關。我相信涉及到兩個線程,即即將開始播放聲音的主線程和一個更新線程,該線程遍歷鏈表中的聲音以不斷更新其狀態。但是,我不明白吊墜的來源可能是什麼。內存轉儲分析(應用程序掛起)
我的WinDbg知識是有限的,但我設法弄清楚,掛起似乎發生在音頻庫的SetLoop方法內(特別是在靜態聲音代碼中)。我使用DirectSound,並且在這種情況下應用程序在Windows 7 32位上運行(我正在開發自己的XP,我從來沒有像這樣的問題)。靜態聲音類在檢查聲音是否正在播放之前鎖定關鍵部分,如果不是,則會將循環標誌設置爲true或false。在這種情況下,主線程調用SetLoop將其設置爲false,因爲它想要以非循環狀態播放聲音。我可以看到,在掛起時,主線程停留在ntdll.dll中的EtwEventEnabled調用中,這顯然是由靜態聲音類的SetLoop方法產生的。我想知道它是否卡在EnterCriticalSection調用中,或者是在調用DirectSound的GetStatus方法獲取輔助緩衝區時進一步下降?這裏是我對內存轉儲分析的知識不足的地方,如果有人花時間查看轉儲,我將非常感激。
下面是轉儲的鏈接,與應用程序的特定符號:任何幫助提前 https://dl.dropbox.com/u/5121962/hangdump.zip
非常感謝。
Dropbox文件是25MB。 – 2013-02-20 17:20:16
這是因爲它包含一個小型轉儲加符號。用合理的連接下載應該不會超過幾分鐘。 – 2013-02-20 17:29:16
這就是我發佈內存轉儲的原因,因爲我不知道可能失敗的代碼的哪個部分。如果我知道這一點,我可以繼續,但在這一點上,我無法弄清楚如何繼續。 – 2013-02-20 17:37:44