SuperAPI AI 工具集

windbg-user-exception-triage

编程与开发

查看项目

更新于 10-16 00:32

技能介绍

用途:面向原生 C/C++ 应用、服务或用户态驱动宿主进程转储中的结构化异常排查,包括在用户态宿主中发生的 UMDF 驱动故障。文件名扩展名不能区分用户态与内核态转储,需在 WinDbg 中确认转储类型。

必要用法:本技能需先加载 windbg-diagnostic-method 并全程应用,用于证据排序、假设检验、置信度校准、独立复核与报告校验。转储与模块应使用匹配的二进制与 PDB,Windows 符号用公共符号;发现不匹配或栈截断需先说明,再定位失败源码行。

建立异常上下文可用命令:.exr -1、.ecxr、k、!analyze -v。记录异常代码、地址、参数、访问类型、寄存器、模块和栈;.ecxr 在可用时选择保存的异常上下文。若未捕获异常上下文,应说明该限制,不能把当前选中线程当作故障线程。

分类与下一步:0xC0000005 且有分配/释放或越界证据,或 0xC0000374 堆损坏,转 windbg-user-heap-corruption-investigation;0xC0000017、0x8007000E 或分配失败路径,转 windbg-user-virtual-memory-exhaustion;协程挂起后锁/解锁失败,转 windbg-user-mutex-held-across-co-await;有 TTD 记录且关注更早的修改,转 windbg-user-ttd-reverse-debugging-triage;无崩溃异常但迹象为工作阻塞,转 windbg-user-wait-chain-analysis;内核转储报告 bugcheck,转 windbg-kernel-bugcheck-triage。不应把堆范围内的每个地址都当作生命周期缺陷,要核对访问类型、故障指令、对象布局和有效分配边界。

无专用技能时的排查:访问冲突需确定读/写/执行目标、使用的对象/寄存器,以及是否违反边界、所有权或同步,区分空指针与过期或损坏状态。0xC0000409/fail-fast 检查异常参数与文档化的快速失败子代码,再查失败条件与调用路径;历史状态名不能证明或排除缓冲区溢出,并非每个 fail-fast 都带 HRESULT。0xC00000FD 栈溢出检查栈边界与帧大小,测试递归、重入、大帧与无法提交栈增长;若证据指向提交失败,用内存耗尽技能。0xE06D7363/MSVC C++ 异常需确定是否已处理,借助可用符号定位 throw/catch 路径,检查运行时/版本支持的异常信息;首次机会抛出不一定就是缺陷。本包不解码抛出对象布局,也不完整诊断 noexcept/终止行为。Stowed/WinRT 异常保留的错误信息可能先于最终失败,应关联其来源栈与嵌套错误;本包不含 XAML 扩展工作流。非法指令或断点需区分 CPU/架构或代码损坏假设与有意断言/调试中断。

验证:异常上下文与代码已建立,或已说明其缺失;故障指令与相关对象/寄存器与假设一致;对备选解释以证据检验,而非只看栈名;显式说明缺失的内存、符号及特殊异常覆盖;所提修复针对已证明的不变量,并具备复现/测试计划。

限制:不提供抛出对象布局解码、noexcept/终止行为的完整诊断及 XAML 扩展工作流;转储与私有源码不应自动上传。