Using NativeAOT to write a .NET GC in C#. In the fifth part, we learn how to decode the GCDesc to find the references of a managed object.| minidump.net
Pro .NET Memory Management 2nd Edition is available! What should you expect from it? Should you buy it if you already own the 1st edition?| minidump.net
Using NativeAOT to write a .NET GC in C#. In the fourth part, we see how walk the heap and how to keep track of allocation contexts.| minidump.net
Using NativeAOT to write a .NET GC in C#. The third part adds some tooling to inspect the objects stored on the heap.| minidump.net
In the first part, we prepared the project and fixed an initialization issue caused by the NativeAOT toolchain. In this second part, we’re going to start the implementation of our GC. The target for now is to build the simplest possible GC that can run basic .NET applications. This GC will only allocate memory and never free it, similar to Konrad Kokosa’s bump-pointer GC. The first step is to write the native interfaces we’re going to need.| minidump.net
First part of a series of articles about writing a .NET Garbage Collector in C# using NativeAOT. This part sets the expectations and setups the project, dealing with the first difficulties.| minidump.net
Part 5 of the series about using NativeAOT to write a .NET profiler in C#. We have all the foundations, we’re finally writing an actual profiler.| minidump.net
A look into how to use Windows Error Reporting to collect crash information for your .NET apps.| minidump.net
When the tool you write to debug crashes crashes. A story of advanced printf-debugging.| minidump.net
A new tool to visualize the activity of the .NET garbage collector.| minidump.net
Using unsafe hacks to walk the managed heap from within a .NET application, without relying on the debugging API.| minidump.net
Exploring a little-known API allowing to allocate managed objects outside of the managed heap.| minidump.net
A deep dive into the weird tricks used by the .NET allocator to align arrays of doubles.| minidump.net
Deep-dive into the SuppressGCTransition attribute introduced in .NET 5.| minidump.net
Part 4 of the series about using NativeAOT to write a .NET profiler in C#, learning many things about native interop in the process. In this part, we learn how to call methods from ICorProfilerInfo.| minidump.net
A surprising error occuring when using C# 7.3 with partial trust.| minidump.net
Part 3 of the series about using NativeAOT to write a .NET profiler in C#, learning many things about native interop in the process. In this part, we write a source generator to automatically generate the boilerplate code needed to implement the ICorProfilerCallback interface.| minidump.net
A faster and safer way to read .NET performance counters from within.| minidump.net
Part 2 of the series about using NativeAOT to write a .NET profiler in C#, learning many things about native interop in the process. In this part, we improve the code from the previous article by using instance methods instead of static methods.| minidump.net
GC.KeepAlive may not work the way you intend when using it in async methods.| minidump.net
The C# specification indicates that function pointers can only be used on static methods. This article explains why.| minidump.net
Part 1 of the series about using NativeAOT to write a .NET profiler in C#, learning many things about native interop in the process. In this part, we will see how to mimic a COM interface in C#.| minidump.net
Using NativeAOT and ClrMD to write a native WinDbg extension in .NET.| minidump.net
How to find an instance of System.Threading.Thread by id in WinDbg, with a .NET Core memory dump.| minidump.net
This article explains how AsyncLocal values are stored in .NET and how to retrieve them from a memory dump.| minidump.net
Browse memory structures from a memory dump in C#, just like you would with ClrMD, but in a more fluent way.| minidump.net
How to tell PerfView to stop grouping unresolved functions under the same “?!?” label.| minidump.net
Digging into a bug in the .NET ARM64 runtime, learning about dispatch stubs, and using that knowledge to diagnose a NullReferenceException.| minidump.net
This story begins when one of our integrations tests started got stuck on one PR that seemingly impacted unrelated code. This is a nice excuse to cover some concepts I haven’t touched in my previous articles, such as downloading the .NET symbols on Linux.| minidump.net
This is the second part of an investigation where I tried to understand why an application was randomly crashing with an AccessViolationException. This part starts when, as I ran out of easy things to try, I decided to map the assembly code of the IsLockHeld method to the original C++ code to understand exactly where it crashed.| minidump.net
Investigating a crash in a .NET application, caused by an AccessViolationException when inspecting the state of a lock.| minidump.net
In this series of article, we’re retracing how I debugged an InvalidProgramException, caused by a bug in the Datadog profiler, from a memory dump sent by a customer. This is the last part of the investigation, about figuring out what is wrong with the IL code.| minidump.net
In this series of article, we’re retracing how I debugged an InvalidProgramException, caused by a bug in the Datadog profiler, from a memory dump sent by a customer. In this part, we extract the dynamic IL from the memory dump.| minidump.net
In this series of article, we’re retracing how I debugged an InvalidProgramException, caused by a bug in the Datadog profiler, from a memory dump sent by a customer. The first part of the investigation is an introduction to using a memory dump from a .NET application to find the information you seek.| minidump.net
Even with years of experience, WebRequest managed to surprise me.| minidump.net
Using startup hooks to automatically fetch GC metrics from any .net core application.| minidump.net
How to inspect arbitrary values in the memory of a .net process on Linux… And find an unexpected bug in the process.| minidump.net
Explaining the ThreadPool starvation issue, and how it can be made worse by the way work-items are queued.| minidump.net
Inspiration for quarantine days: how to connect a Raspberry Pi to a training bike to stream the speed to a computer and pause a video when below 20 km/h| minidump.net
Leveraging the async machinery to transparently switch to the UI thread when needed.| minidump.net
Using debugging tools to get rid of a nagging popup.| minidump.net
How to implement the WinDbg DumpStackObjects command in ClrMD.| minidump.net
Showing the mindset and methodology involved in the debugging of an application you know almost nothing about.| minidump.net
Guide on how to write debugger extensions that are compatible with both WinDbg and LLDB.| minidump.net
How to abuse .net core startup hooks to make apps behave in crazy ways.| minidump.net
The Java ReferenceQueue is a mechanism that lets you know when an object has been GC’d. How hard can it be to reimplement it in .NET?| minidump.net
The impact of using the wrong class for the job. Profiling and fixing a performance issue in WinDbg.| minidump.net
Non-exhaustive list of code patterns to avoid in C#, either because they are risky or perform poorly.| minidump.net