我正在使用 Windbg GUI 尝试解决 WPF 应用程序中的错误,该应用程序与 dotnet SDK 8.0.108 是独立的
如果我运行“!syncblk”,我会收到以下错误消息:
请求 SyncBlk 数据时出错
任何人都可以帮我解决此错误消息吗?为什么获取不到syncblk数据?
根据要求,我创建了一个最小的可重现示例here
重现步骤:
我很想知道是否有其他人可以验证相同的复制品,或者它是否特定于我的机器。
我使用的是 WinDbg 1.2407.24003.0,带有默认的 SOS 扩展名。
您正在自己创建故障转储。它不是由调试器创建的。
在你的代码中
var dumpType = DumpType.Normal;
// var dumpType = DumpType.WithHeap;
SyncBlock 与堆上的对象一起存储。除了对象数据之外,还有对象前面的方法表(MT)和方法表前面的同步块。正如 MS 文章中所解释的那样。
为了分析同步块,您需要堆,因为信息就在那里。解决方案在注释的代码行中:使用堆信息存储故障转储。
为什么
DumpType.WithHeap
失败并显示 HRESULT 0x80004005 (E_FAIL) - 我不知道。我切换到DumpType.Full
并且可以成功运行!syncblk
:
0:000> !syncblk
Index SyncBlock MonitorHeld Recursion Owning Thread Info SyncBlock Owner
-----------------------------
Total 80
CCW 5
RCW 10
ComClassFactory 0
Free 0