用途:用于诊断 C++ 协程(原生应用、服务、UMDF 驱动等)在 co_await 挂起期间仍持有线程亲和锁、随后出现挂起或失败的问题。
主要能力:加载 windbg-diagnostic-method 后,按证据排序、假设检验、置信度校准、独立复核和报告校验流程工作,并补充该缺陷族特有的命令与证据要求。检测模式下寻找在 co_await 前获取、在恢复或协程析构后才释放的锁;互斥体所有权属于获取线程而非协程帧,换线程恢复可能违反契约,同线程恢复也可能因等待操作需要该锁而重入或停滞。
使用方式:源码中确定锁原语及获取/释放范围,审计 RAII 守卫或所有权存活期间的每个挂起点;用跟踪/源码证据确定获取线程与恢复线程;核实 awaiter 的恢复契约(C++/WinRT 对特定 awaitable 可保留 apartment 上下文,resume_background 则有意切换),不要臆造所有者 TID。区分错线程释放、依赖环、挂起期间状态变更、生命周期失败与无关内存损坏。修复思路是把线程亲和锁放入同步作用域,await 后重新校验状态:加锁时取快照及代次,解锁后 await,恢复线程上加锁再校验代次、生命周期与假设,再应用结果或显式处理过期/取消操作,每个同步作用域用 RAII。
适用场景与限制:若症状是一般阻塞,改用 windbg-user-wait-chain-analysis;堆对象损坏用 windbg-user-heap-corruption-investigation;有录制可用 windbg-user-ttd-reverse-debugging-triage 建立所有权时间线。不要笼统建议更换互斥体类型——共享锁是独立设计决策,改为递归互斥体或 shared_mutex 并不能让线程亲和锁对协程安全。校验要求:修正路径中没有任何线程亲和锁所有权跨越挂起、理解各 awaiter 的线程/apartment 契约、挂起后重新校验状态不变量,并测试取消、并发修改、关闭与失败的 awaited 操作。反馈须遵循 FEEDBACK.md,报告经审核净化的反馈至 WinDbg-Feedback,注明本技能名与 plugin.json 中的包版本,不自动上传源码、转储或记录。