SuperAPI AI 工具集

windbg-kernel-lock-deadlock-triage

测试与质量

查看项目

更新于 10-16 00:32

技能介绍

用途:当内核线程阻塞在驱动同步对象上,或 Driver Verifier 报告锁顺序违规时,用该技能构建并验证循环等待(死锁)关系图。不适合把所有卡顿都当作死锁处理:看门狗 bugcheck 也可能只是 CPU/DPC 进展失败。

主要能力与证据要求:使用内核线程栈、同步对象证据和 Driver Verifier 死锁记录。先加载 windbg-diagnostic-method 并全程遵循其证据排序、假设检验与结论置信度要求。区分已证实的循环或验证器报告的锁序反转、尚可推进的争用、饥饿或阻塞在其它请求上的持有者,以及自旋/IRQL 问题。

使用方式:

  1. 收集持有者与等待者:!locks、!thread <ethread-address>、!process 0 7。注意 !locks 只枚举 ERESOURCE,并非所有 pushlock、fast mutex、spinlock 的清单;其它原语需用有文档的原语专用检查,并明确列出缺失的持有者。
  2. 检查记录的锁顺序证据:若启用了 Driver Verifier 死锁检测且转储含记录,使用 !deadlock 1,查看报告的资源、获取顺序与线程。验证器可能在死锁尚未形成前就发现不安全顺序;没有相应验证/历史时空结果不构成安全证明。Verifier 设置见 windbg-kernel-verifier-triage。
  3. 构建并检验关系图(A 持有 X 等待 B 持有的 Y,B 持有 Y 等待 X),为每条边给出证据,检查递归获取、锁下回调、I/O 完成依赖和销毁路径。涉及 IRP 时转 windbg-kernel-irp-lifecycle-triage,跨越到用户态 COM/RPC 时转 windbg-user-wait-chain-analysis,并沿用已证实的边。
  4. 定位驱动路径:确定在获取/等待另一资源时持有某资源的调用路径,检查 IRQL、允许的等待、锁层级与对象生命周期;公共符号与捕获状态不足恢复边时,请求授权证据并保持结论暂定。

修复模式:一致的获取层级、缩小锁范围、避免持锁无界等待与跨组件回调、在所有权设计允许时把可能阻塞的销毁移出锁。不要在不保持不变量与完成/取消语义的情况下替换锁或加超时。

验证与限制:记录关系图、受支持的循环/反转及违规驱动路径,测试并发、回调、拆解与相应 Verifier 检查,区分已证实修复与未证实争用假设。使用时不要自动上传转储、锁历史记录或驱动源码。反馈按 FEEDBACK.md 提交给 WinDbg-Feedback,并注明本技能名与 plugin.json 中的包版本。