An Expert Community Where Every Voice Matters


Join Us

Csharp

  • Monitor Finalizers, contention and threads in your application

    Monitor Finalizers, contention and threads in your application

    This post of the series details more complicated CLR events related to finalizers and threading. Part 1: Replace .NET performance counters by CLR event tracing. Part 2: Grab ETW Session, Providers and Events. Introduction In the previous post, you saw how the TraceEvent nuget helps you deciphering simple ETW events such as the one emitted when…

  • How to beat !dumpheap -stat?… with ClrMD

    How to beat !dumpheap -stat?… with ClrMD

    When you are dealing with large memory dumps, figuring out what instances of which types (i.e. the list of types sorted by size of their instances with their count) are stored in memory takes time. Sos in WinDBG provides the dumpheap -stat command that can take minutes. For example, on a 16.7 GB production dump,…

  • Grab ETW Session, Providers and Events

    Grab ETW Session, Providers and Events

    This post of the series shows how to easily listen to CLR events with the TraceEvent package. Part 1: Replace .NET performance counters by CLR event tracing. In the previous post, you saw that the CLR is emitting traces that could (should?) replace the performance counters you are using to monitor your application and investigate when…

  • Extending the new WinDbg, Part 3 — Embedding a C# interpreter

    Extending the new WinDbg, Part 3 — Embedding a C# interpreter

    In part 1 and part 2, we’ve seen in detail how to customize the WinDBG UI as we see fit. This time, we’ll apply this knowledge to cover a very specific use-case: running C# code as script directly inside of WinDBG. Why would you want to do that? If like us you often use ClrMD during…

  • Extending the new WinDbg, Part 2 — Tool windows and command output

    Extending the new WinDbg, Part 2 — Tool windows and command output

    In the first part of the series, we saw how to extend the new WinDbg add a button to the UI, execute, and listen to commands. This time, we will push things a bit farther, and we’re going to add history and multiple editors support. The history feature will allow you to recall an old…

  • ClrMD Part 9 — Deciphering Tasks and Thread Pool items

    ClrMD Part 9 — Deciphering Tasks and Thread Pool items

    This post of the series shows how to easily list pending tasks and work items managed by the .NET thread pool using DynaMD proxies. Part 1: Bootstrap ClrMD to load a dump. Part 2: Find duplicated strings with ClrMD heap traversing. Part 3: List timers by following static fields links. Part 4: Identify timers callback and other…

  • ClrMD Part 8 — Spelunking inside the .NET Thread Pool

    ClrMD Part 8 — Spelunking inside the .NET Thread Pool

    This post of the series shows how to easily list pending tasks and work items managed by the .NET thread pool using DynaMD proxies. Part 1: Bootstrap ClrMD to load a dump. Part 2: Find duplicated strings with ClrMD heap traversing. Part 3: List timers by following static fields links. Part 4: Identify timers callback and other…

  • Extending the new WinDbg, Part 1 — Buttons and commands

    Extending the new WinDbg, Part 1 — Buttons and commands

    This article is the first of a three-parts series on how to extend the new Windows 10 WinDbg app in order to make your .NET debugging easier and faster. In the first part of the series, you are going to see how to add a button to the ribbon and react to commands. For that, we…

  • ClrMD Part 7 — Manipulate nested structs using dynamic

    ClrMD Part 7 — Manipulate nested structs using dynamic

    In the previous post of the ClrMD series, we’ve seen how to use dynamic to manipulate objects from a memory dump the same way as you would with actual objects. However, the code we wrote was limited to class instances. This time, we’re going to see how to extend it to structs. The associated code…

  • ClrMD Part 6 — Manipulate memory structures like real objects

    ClrMD Part 6 — Manipulate memory structures like real objects

    This sixth post of the ClrMD series details how to make object fields navigation simple with C# like syntax thanks to the dynamic infrastructure. The associated code is part of the DynaMD library and is available on GitHub and nuget. Part 1: Bootstrap ClrMD to load a dump. Part 2: Find duplicated strings with ClrMD heap…