public bool Run(SptWrapper wrapper, string args) { var threads = wrapper.GetThreads(); TableWriter tw = wrapper.CreateTableWriter(); tw .AddColumn(4) .AddColumn(4) .AddColumn(4) .AddPointerColumn() .AddColumn(8) .AddColumn(11, true) .AddPointerColumn() .AddPointerColumn() .AddPointerColumn() .AddColumn(5, true) .AddColumn(3) .AddColumn(-1, true); tw.TextColumn("").TextColumn("ID").TextColumn("OSID").TextColumn("ThreadOb").TextColumn("State") .TextColumn("GC Mode").TextColumn("GC Alloc").TextColumn("Context").TextColumn("Domain ").TextColumn("Lock").TextColumn("Apt") .TextColumn("Exception") .NewRow(); foreach (var t in threads) { tw .HexColumn(0) .HexColumn(t.CorThreadId) .HexColumn(t.osThreadId) .PointerColumn(t.ThreadAddress) .HexColumn(t.State) .TextColumn(t.PreemptiveGCDisabled == 0 ? "Preemptive" : "Cooperative") .PointerColumn(t.GCAllocContext) .PointerColumn(t.GCAllocContextLimit) .PointerColumn(t.domain) .Column("{0}", t.LockCount) .TextColumn("MTA") .TextColumn("???"); tw.NewRow(); } return(true); }