从 0xc00000fd 到具体方法:一次 .NET Stack Overflow 问题排查
线上有些问题很像“应用突然消失”:访问不到页面,应用日志里没有明显异常,服务却不断重启进程。遇到这种情况,Windows Event Log 往往比应用日志更早给出方向。 本文记录一次 .NET 应用 Stack Overflow 的排查过程。重点不在某个具体插件,而在于如何从一条异常码逐步缩小到具体的方法。 先从异常码确认方向 问题最初表现为应用无法访问,同时能看到大量应用异常退出,以及保活机制不断重启应用的日志。 Event Log 中有一条关键记录: Exception code: 0xc00000fd 在 Windows 中,0xc00000fd 通常对应栈溢出(STATUS_STACK_OVERFLOW)。 先拿到 dump,不要急着下结论 在 .NET 5 及更高版本中,可以参考 .NET 的 Stack Overflow 调试文档,让进程生成 dump。现场排查时,可以先让管理员权限启动相关服务,然后收集控制台输出;如果仍然需要更完整的现场信息,可以配置生成 mini dump。 拿到 dump 后使用 dotnet-dump 加载: dotnet-dump analyze .\dump.6012.dmp 一个容易踩到的坑是:加载完成后直接执行 crashinfo、printexception 或 clrstack,可能看不到有价值的信息: > crashinfo ERROR: No crash info to display > pe There is no current managed exception on this thread 这并不表示 dump 没有问题。Stack Overflow 发生时,运行时可能来不及建立普通异常上下文;排查重点应该转向线程状态和栈帧本身。 ...