【问题标题】:ntdll!kifastsystemcallretntdll!kifastsystemcallret
【发布时间】:2009-12-15 10:48:20
【问题描述】:

我的程序在执行结束时崩溃,甚至看不到堆栈展开信息。 我能看到的只有这个“ntdll!kifastsystemcallret”,能不能给我一些启发?

【问题讨论】:

  • “甚至看不到堆栈展开信息”,这意味着...我一直在尝试使用 windbg。

标签: c++ windows crash


【解决方案1】:

KiFastSystemCallRet 意味着线程处于系统调用中 - x86 NT 系统调用调度的一个不幸方面是它不会将上下文返回到原始位置,而是必须返回到 ntdll 中的静态位置,这将修复上下文,让你回到你来自的地方。粘贴到堆栈中,我们可以为您提供更多提示...

【讨论】:

    【解决方案2】:

    您会经常在所有正在等待的线程上看到这一点——其中一个线程应该有一些更有用的堆栈,其余的可能会显示这一点。尝试安装Debugging Tools for Windows 并在windbg 中运行程序。当崩溃发生时,输入!analyze -v 以获取有关崩溃可能原因的有用事后分析。

    【讨论】:

    • “分析”命令有什么作用?我的项目经理说 windbg 是“Visual Studio 的轻量级版本”(我们使用 VS2008),但人们在这里推荐它的事实表明它具有 VS 所没有的功能。我可以在 VS2008 中进行相当于“分析”的操作吗?如果是这样,有人能告诉我怎么做吗?
    • 首先,道歉 - 应该是 '!analyze -v'。其次,我建议升级您的项目管理器 :-) Windbg 不是 Visual Studio 的“轻量级”版本,它是一个低级调试器。您不能在其中编写代码或编译任何东西。它使您可以更多地访问有关进程、句柄、锁等的低级数据,并具有一些额外的功能,例如“!分析”,它应用许多启发式方法来找出最有可能发生崩溃的位置,以及通常如何发生。 Windbg 不需要任何费用,也不会取代 VS - 您可以同时使用两者。
    【解决方案3】:

    您可以通过附加windbg 并提供对操作系统符号的引用来尝试调试。可能会提供一些线索。

    【讨论】:

      【解决方案4】:

      您能否提供一个包含更多信息的调用堆栈,例如在此特定崩溃发生之前正在执行的操作。我以前也遇到过这样的崩溃。

      这也很可能是第一次机会例外。你确定这是崩溃吗?

      【讨论】:

        【解决方案5】:

        kifastsystemcallret ~ 内核快速系统调用返回,或从内核函数紧急退出?一些内核调用失败...

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-06-20
          • 1970-01-01
          • 2017-04-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多