【发布时间】:2009-12-15 10:48:20
【问题描述】:
我的程序在执行结束时崩溃,甚至看不到堆栈展开信息。 我能看到的只有这个“ntdll!kifastsystemcallret”,能不能给我一些启发?
【问题讨论】:
-
“甚至看不到堆栈展开信息”,这意味着...我一直在尝试使用 windbg。
我的程序在执行结束时崩溃,甚至看不到堆栈展开信息。 我能看到的只有这个“ntdll!kifastsystemcallret”,能不能给我一些启发?
【问题讨论】:
KiFastSystemCallRet 意味着线程处于系统调用中 - x86 NT 系统调用调度的一个不幸方面是它不会将上下文返回到原始位置,而是必须返回到 ntdll 中的静态位置,这将修复上下文,让你回到你来自的地方。粘贴到堆栈中,我们可以为您提供更多提示...
【讨论】:
您会经常在所有正在等待的线程上看到这一点——其中一个线程应该有一些更有用的堆栈,其余的可能会显示这一点。尝试安装Debugging Tools for Windows 并在windbg 中运行程序。当崩溃发生时,输入!analyze -v 以获取有关崩溃可能原因的有用事后分析。
【讨论】:
您可以通过附加windbg 并提供对操作系统符号的引用来尝试调试。可能会提供一些线索。
【讨论】:
您能否提供一个包含更多信息的调用堆栈,例如在此特定崩溃发生之前正在执行的操作。我以前也遇到过这样的崩溃。
这也很可能是第一次机会例外。你确定这是崩溃吗?
【讨论】:
kifastsystemcallret ~ 内核快速系统调用返回,或从内核函数紧急退出?一些内核调用失败...
【讨论】: