Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

APPCRASH StackOverflowException clr.dll c00000fd

I am running a .Net console application that executes 24 hrs a day. It has a bug that occurs about once every 6 days.

I would like your assistance to fix this bug. First I will provide some background, and then I will provide the exception messaging.

Unfortunately I do not have steps to reproduce. You will see why as you read on.

First some background:

I have robust exception handling in my code (or so I thought). For example I have a try...catch block in my Main() method that captures any unhandled exceptions and if they are FATAL it restarts the underlying task. It works great for any exceptions generated from my own code.

I cannot explain why the below exception isn't handled in my code. My best guess is that clr.dll exceptions do not get caught within the managed stack. And if that is the case, I do not know how to generate a stack trace. I don't even know where to begin to fix this.

The process I am running is using the following versions and modules:

  • C# .Net Framework 4.6.1
  • Console App project type
  • System.Net.WebClient
  • log4net
  • Windows 7 64-bit

At the time of the crash I checked RAM and HDD: both have plenty of free space.

About the code I'm executing. The process is a continous loop that downloads data from a website and saves it to a text file. If there is an error, it is logged using log4net.

The basic loop is this:

 for (int i = 0; i < 5; i++)
            {
                try
                {
                    return new WebClient().DownloadString(url);
                }
                catch 
                {
                    Thread.Sleep(500); // slow it down.
                }
            }

The following is the only message that displays in my console window when the exception occurs: (no stack trace displayed)

Process is terminated due to StackOverflowException

My console application completely freezes up and a dialog window pops up with the following information (closing this dialog also terminates my application)

 Problem signature:
  Problem Event Name:   APPCRASH
  Application Name: foo.goo.BatchExecutor.exe
  Application Version:  1.0.0.0
  Application Timestamp:    5a50f3eb
  Fault Module Name:    clr.dll
  Fault Module Version: 4.7.2117.0
  Fault Module Timestamp:   59cf5105
  Exception Code:   c00000fd
  Exception Offset: 0002429f
  OS Version:   6.1.7601.2.1.0.256.48
  Locale ID:    1033
  Additional Information 1: 28e8
  Additional Information 2: 28e8aacd8abfe32876bc8363e8e5c526
  Additional Information 3: 6916
  Additional Information 4: 6916665ca52ff482d854f190abcf46b2

The only other place I could find information about the crash is in the Windows Event Log:

Log Name:      Application
Source:        Application Error
Date:          1/23/2018 5:51:46 PM
Event ID:      1000
Task Category: (100)
Level:         Error
Keywords:      Classic
User:          N/A
Computer:      FOOGOO
Description:
Faulting application name: foo.goo.BatchExecutor.exe, version: 1.0.0.0, time stamp: 0x5a50f3eb
Faulting module name: clr.dll, version: 4.7.2117.0, time stamp: 0x59cf5105
Exception code: 0xc00000fd
Fault offset: 0x0002429f
Faulting process id: 0x1e00
Faulting application start time: 0x01d39169354e41a7
Faulting application path: C:\Users\Owner\Desktop\SHARED\foo.goo.BatchExecutor\foo.goo.BatchExecutor.exe
Faulting module path: C:\Windows\Microsoft.NET\Framework\v4.0.30319\clr.dll
Report Id: 21b9b2a4-00a9-11e8-9f6c-94c69110a719
Event Xml:
<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
  <System>
    <Provider Name="Application Error" />
    <EventID Qualifiers="0">1000</EventID>
    <Level>2</Level>
    <Task>100</Task>
    <Keywords>0x80000000000000</Keywords>
    <TimeCreated SystemTime="2018-01-24T01:51:46.000000000Z" />
    <EventRecordID>1852</EventRecordID>
    <Channel>Application</Channel>
    <Computer>FOOGOO</Computer>
    <Security />
  </System>
  <EventData>
    <Data>foo.goo.BatchExecutor.exe</Data>
    <Data>1.0.0.0</Data>
    <Data>5a50f3eb</Data>
    <Data>clr.dll</Data>
    <Data>4.7.2117.0</Data>
    <Data>59cf5105</Data>
    <Data>c00000fd</Data>
    <Data>0002429f</Data>
    <Data>1e00</Data>
    <Data>01d39169354e41a7</Data>
    <Data>C:\Users\Owner\Desktop\SHARED\foo.goo.BatchExecutor\foo.goo.BatchExecutor.exe</Data>
    <Data>C:\Windows\Microsoft.NET\Framework\v4.0.30319\clr.dll</Data>
    <Data>21b9b2a4-00a9-11e8-9f6c-94c69110a719</Data>
  </EventData>
</Event>

*****UPDATE WITH SOLUTION WORKAROUND *****

I have given up trying to handle this exception within .Net. I found an effective workaround. This workaround applies to Windows, specifically any version with an Event Viewer.

Workaround Instructions.

1) Open control panel->Admin Tools->Event Viewer->Windows Logs->Applications.

2) Select the offending event. In my case, it is state ERROR, and matches the example that you see above.

3) On the right hand side click "Attach Task to This Event".

4) Complete the wizard. In my case, I restart my application.

5) Save the task.

6) Now switch over to Task Scheduler and find the task. Click Properties. Click through the tabs and configure the Task as you see fit.

like image 516
sapbucket Avatar asked Jan 26 '18 17:01

sapbucket


2 Answers

*****UPDATE WITH SOLUTION WORKAROUND *****

I have given up trying to handle this exception within .Net. I found an effective workaround. This workaround applies to Windows, specifically any version with an Event Viewer.

Workaround Instructions.

1) Open control panel->Admin Tools->Event Viewer->Windows Logs->Applications.

2) Select the offending event. In my case, it is state ERROR, and matches the example that you see above.

3) On the right hand side click "Attach Task to This Event".

4) Complete the wizard. In my case, I restart my application.

5) Save the task.

6) Now switch over to Task Scheduler and find the task. Click Properties. Click through the tabs and configure the Task as you see fit.

like image 138
sapbucket Avatar answered Nov 20 '22 05:11

sapbucket


I suggests to use ProcDump, it can be configured to generate a crash dump when the StackOverflowException occurs.

procdump -accepteula -e 1 -f C00000FD.STACK_OVERFLOW -g -ma <PID> <OUTPUT PATH>

Then analyze the dump file using one of this tools Visual studio, windbg, debugdiag, clrmd.

like image 32
user2244652 Avatar answered Nov 20 '22 05:11

user2244652