我正在从调试器启动一个应用程序.如何将某个文件作为调试过程的标准输入连接?
编辑
这是我使用的命令行:
windbg -logo c:\dumps\dbg.log -QY -awow64exts -c "!sw;g;g" c:\dev\LocalDriverProxyConsole.exe
Run Code Online (Sandbox Code Playgroud)
LocalDriverProxyConsole.exe需要stdin上的一些输入,但我想从文件中提供它.当应用程序直接运行时,这是一个简单的重定向,但如果我通过windbg运行它该怎么办?
我正在尝试分析在应用程序发生挂起后从一位最终用户那里收到的内存转储。它似乎与我的应用程序的音频播放部分有关。我相信涉及两个线程,即将开始播放声音的主线程和一个更新器线程,它迭代链接列表中的声音以不断更新它们的状态。然而,我不明白挂起的根源是什么。
我的 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
预先非常感谢您的帮助。