.NET GC 后的 WinDbg 条件断点

WinDbg conditional breakpoint after .NET GC

我在 GC 循环结束时设置条件断点。
程序中断但无法评估 GcCondemnedGeneration 变量,因此无论实际收集了多少代,程序都会在每个 GC 周期中断。

这是断点命令:

> bp clr!ThreadSuspend::RestartEE ".if @@(clr!SVR::GCHeap::GcCondemnedGeneration==2) {kb} .else {g}"

这是我在断点中断时得到的:

Type information missing error for SVR::GCHeap::GcCondemnedGeneration
Couldn't resolve error at 'clr!SVR::GCHeap::GcCondemnedGeneration==2) {kb} .else {g}'
clr!ThreadSuspend::RestartEE:
00007fff`145d5dfc 488bc4          mov     rax,rsp

我尝试了各种变体,但都失败了。
机器上安装的.Net版本是4.6.1.
我的程序与服务器 gc 一起运行。
clr.dll 符号加载成功。

谢谢

我能够在不使用 C++ 表达式语法和仅使用 MASM 表达式的情况下使其工作(其中 dwo 用于取消引用 DWORD 大小的数据,例如 unsigned int):

bp clr!ThreadSuspend::RestartEE ".if (poi(clr!SVR::GCHeap::GcCondemnedGeneration)==2) {kb} .else {g}"