.NET, Windbg

GC Start and Stop events in .NET using Windbg

I was recently showing someone the new ETW features in .NET especially the GC Event notification and I was asked if we can get this using Windbg.

So here is the sample code for the GC Collection

namespace GCStartStop
public partial class Form1 : Form
public Form1()
button1.Click += (s, b) => GC.Collect(2);
button1.Click += (s, b) => GC.Collect(1);

The goal is set to a break-point only when the collection count is 2. Here is a bp script for doing this.

bp clr!WKS::GCHeap::SuspendEE ".if (dwo(clr!WKS::GCHeap::GcCondemnedGeneration)==2) {.echo start of gen 2;g} .else {gc}"

The same thing can be done for clr!WKS::GCHeap::RestartEE.

When showing this to someone I was asked what does “EE” acronym in “SuspendedEE” ?  “EE” is  Execution Engine.