Skip to content

Troubleshooting StackOverflow Exceptions

Sponsor: Do you build complex software systems? See how NServiceBus makes it easier to design, build, and manage software systems that use message queues to achieve loose coupling. Get started for free.

Learn more about Software Architecture & Design.
Join thousands of developers getting weekly updates to increase your understanding of software architecture and design concepts.


Is your .NET application randomly crashing? In Production? Without any relevant application logs?  You may be hitting a StackOverflowException if you see exception code 0xc00000fd in the event log. Here’s how to start troubleshooting StackOverflow Exceptions. 0xc00000fd First take a look in your event log.  If you see a log similar to this:
Faulting application name: MyApp.exe, version: 1.0.0.0, time stamp: 0xdfd8c80b Faulting module name: clr.dll, version: 4.7.2558.0, time stamp: 0x59d413ce Exception code: 0xc00000fd
The important part here is the exception code 0xc00000fd is a StackOverflowException.

Troubleshooting a .NET StackOverflowException

First thing I would recommend is looking for any recursion in your codebase.  This is often likely the cause when you have unbounded recursion.  It may not be obvious if you have data structures that play a role in your application and specifically where recursion exists.

Debug Diagnostics Tool (DEBUGDIAG)

If you can’t determine where the StackOverflowException is occuring, first place to start is by downloading and installing the Debug Diagnostics Tool from Microsoft. https://www.microsoft.com/en-us/download/details.aspx?id=49924 Once installed, run the “DebugDaig 2 Collection” application.  You will be immediately prompted with the following window: If you’re running ASP.NET 4.x you will likely be selecting IIS, select the first option.  Otherwise, you likely are going to select a process or a NT Service (Windows Service). On the follow window, click the Exceptions button. DebugDiag From here we can specify to capture a StackOverflow exception.  Change the Action Type to a Full userdump. DebugDiag Finally, click OK and Next to save the new Crash Rule. Once your application hits a StackOverflowException and crashes, you will have a .dmp file in the rule folder. DebugDiag

WinDbg

Once you have your memory dmp file, we are going to want to open it up with WinDbg. You have a couple options for installing.  You can download Windows Driver Kit (WDK) which which require you to have latest Visual Studio with Desktop Development with C++ component installed. https://go.microsoft.com/fwlink/?linkid=873060 Another option is to download the the new WinDbg Preview from the Windows Store.  This is a new version of WinDbg with a more modern look. Once you have WinDbg, whatever version, you can now type in .loadby sos clr in the Command input. WinDbg Followed by !CLRStack as the next command, which should then provide you with your .NET call stack. WinDbg If you have any recommendations on WinDbg usage or other useful insights, please share them in the comments or on Twitter.

Learn more about Software Architecture & Design.
Join thousands of developers getting weekly updates to increase your understanding of software architecture and design concepts.


Leave a Reply

Your email address will not be published. Required fields are marked *