我正在尝试分析从我的应用程序中出现卡顿后收到的一个内存转储。它似乎与我的应用程序的音频播放部分有关。我认为有两个线程参与其中,主线程即将开始播放声音,而更新器线程则迭代链表中的声音以连续更新它们的状态。然而,我不明白卡住的原因可能是什么。
我的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 非常感谢您提前的任何帮助。
我的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 非常感谢您提前的任何帮助。