gpt4 book ai didi

windows - 从用户空间卡住窗口的方法

转载 作者:可可西里 更新时间:2023-11-01 13:28:50 24 4
gpt4 key购买 nike

我目前正在调查导致窗口卡住的错误。错误发生后,当前正在运行的所有进程将继续运行,但如果您尝试使用它们,它们最终会卡住。

例如,我有一个任务管理器和几个在卡住时打开的命令。任务管理器运行良好,显示处理器/内存使用情况、所有进程列表等。但如果我尝试终止进程,它会卡住。如果我尝试打开文件 -> 新任务,它会卡住。在 cmd 中,如果我尝试打开 Windows 应用程序,该命令将执行并且新进程将出现在任务管理器中,但应用程序不会启动。即使启动命令行应用程序也会卡住。

有问题的软件是一组 12 个不同的服务应用程序,它们使用 WCF 相互通信。大多数是用C#写的,也有一些Fortran、C++。所有这些都在运行用户空间,我们没有在内核空间中执行任何东西。

所以我的问题是有人见过这种或类似的行为吗?原因是什么?从理论上讲,用户空间应用程序所做的任何事情都不应该卡住整个操作系统?有关调试这种情况的任何提示也会有所帮助。感谢您的宝贵时间。

更新 1:

我们已经尝试编写一个小型应用程序,它不断地从磁盘写入/读取(随机查找和打开/关闭文件)并在系统死机之前启动。应用程序在卡住后继续成功写入/读取打开和关闭文件。内存使用与正常使用时相同,在 4 到 5 GB 之间,系统有 6 GB。

我们还进行了内存转储,但问题是我们未能弄清楚发生了什么。转储当然显示 Windows 在键盘驱动程序中已卡住,但除此之外我们无法弄清楚。如果我们可以进行用户空间内存转储,那将会更有用。好的,这句话让我谷歌了一下,似乎有一个完整的内存转储选项,将对此进行更多研究并更新进度。

我们目前怀疑是 NOD32 防火墙,当它关闭时一切似乎都工作正常。我们仍然需要确认这一点,并找出我们的代码中是什么引发了这种行为。

感谢大家的帮助。

更新 2:

好的,我已经成功地创建了完整的内存转储。这并不像我希望的那么容易,这里有一些有用的资源,也许有一天它们会对某人有所帮助..:

http://www.osronline.com/article.cfm?article=545

http://blogs.msdn.com/b/ntdebugging/archive/2010/04/02/how-to-use-the-dedicateddumpfile-registry-value-to-overcome-space-limitations-on-the-system-drive-when-capturing-a-system-memory-dump.aspx

一旦系统卡住,我启动一个 cmd.exe 并启动复制命令,cmd 卡住,这是它的堆栈跟踪:

    fffff880`087571d0 fffff800`02cc2992 nt!KiSwapContext+0x7a
fffff880`08757310 fffff800`02cc4d0f nt!KiCommitThreadWait+0x1d2
fffff880`087573a0 fffff800`02cd9d1f nt!KeWaitForSingleObject+0x19f
fffff880`08757440 fffff800`02fc06d6 nt!AlpcpSignalAndWait+0x8f
fffff880`087574f0 fffff800`02fbe660 nt!AlpcpReceiveSynchronousReply+0x46
fffff880`08757550 fffff800`02fcd13d nt!AlpcpProcessSynchronousRequest+0x33d
fffff880`08757670 fffff800`030ade59 nt!LpcpRequestWaitReplyPort+0x9c
fffff880`087576d0 fffff880`05ad1344 nt!LpcRequestWaitReplyPort+0x19
fffff880`08757710 fffff880`05ad430f eamon+0x5344
fffff880`087578d0 fffff880`05ad25bb eamon+0x830f
fffff880`08757970 fffff800`02fd075f eamon+0x65bb
fffff880`087579f0 fffff800`02fb6624 nt!IopCloseFile+0x11f
fffff880`08757a80 fffff800`02fd0251 nt!ObpDecrementHandleCount+0xb4
fffff880`08757b00 fffff800`02fd0164 nt!ObpCloseHandleTableEntry+0xb1
fffff880`08757b90 fffff800`02cba953 nt!ObpCloseHandle+0x94
fffff880`08757be0 00000000`77bff7aa nt!KiSystemServiceCopyEnd+0x13 (TrapFrame @ fffff880`08757be0)
00000000`002fd848 00000000`00000000 ntdll!ZwClose+0xa

更新 3:

经过大量测试后,我们得出结论,该问题与 ESET NOD32 Antivirus 有关。感谢大家提供的帮助和信息。

最佳答案

不确定可能的原因,但在我看来,最好的继续进行的方法是在卡住期间生成完整的内存转储并使用 WinDbg 寻找线索。参见 here如何使用键盘创建 BSOD。

关于windows - 从用户空间卡住窗口的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6882208/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com