gpt4 book ai didi

.net - 如何解决 ntdll.dll 中的卡住(或死锁)?

转载 作者:行者123 更新时间:2023-12-02 00:02:51 25 4
gpt4 key购买 nike

我有一个在 .Net framework 4 上运行的应用程序,我的应用程序运行托管和非托管代码。在非托管代码中,使用了 UDP 套接字。当应用程序从 Visual Studio 运行时,一切都很好,但是当它自己运行时,它经常死机。我在 Windows XP SP3 和 Windows 7 SP1 上都看到了这种行为。当我将调试器附加到应用程序并暂停它时,我可以看到许多线程卡在 ntdll.dll 中的相同内存地址处。反汇编时,执行的 netdll.dll 命令是“ret”。

这是否为任何人敲响了警钟?

之前好像也有过类似的问题,比如这里报告的,和UDP有关:
http://social.msdn.microsoft.com/Forums/en-US/netfxnetcom/thread/1b54b2f2-6e7c-405b-bdda-62197ac8a287
从来没有人给出答案。

我还发现了一个针对类似问题的旧修补程序,但根据 Microsoft 的说法,它仅适用于 Windows NT 4。

任何帮助,将不胜感激。

最佳答案

导致死锁的不是操作系统。是的,您的堆栈跟踪将显示它在 ntdll.dll 内的 KiFastSystemCallRet() 上阻塞。堆栈跟踪指向 SYSENTER 之后的 RET 指令。但它只是在做你要求它做的事情。

使用 Debug + Windows + Threads 窗口查看您的线程在做什么。经典的死锁场景是其中一个线程获取了同步对象并且正在阻塞。另一个线程试图获取的同步对象。这是最常见的线程问题之一。

关于.net - 如何解决 ntdll.dll 中的卡住(或死锁)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5300295/

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