APPCRASH StackOverflowException clr.dll c00000fd

sap*_*ket 5 .net c# stack-overflow

我正在运行一个.Net控制台应用程序,每天执行24小时。它的错误大约每6天发生一次。

希望您能帮助您修复此错误。首先,我将提供一些背景知识,然后再提供异常消息。

不幸的是,我没有复制步骤。继续阅读时,您会明白为什么。

首先,一些背景:

我的代码中有健壮的异常处理(或我认为)。例如,我的Main()方法中有一个try ... catch块,该块捕获任何未处理的异常,如果它们是致命异常,它将重新启动基础任务。它适用于我自己的代码生成的任何异常。

我无法解释为什么我的代码未处理以下异常。我最好的猜测是clr.dll异常不会被捕获在托管堆栈中。如果真是这样,我不知道如何生成堆栈跟踪。我什至不知道从哪里开始解决这个问题。

我正在运行的进程正在使用以下版本和模块:

  • C#.Net Framework 4.6.1
  • 控制台应用程序项目类型
  • System.Net.WebClient
  • log4net
  • Windows 7 64位

崩溃时,我检查了RAM和HDD:它们都有足够的可用空间。

关于我正在执行的代码。该过程是一个连续的循环,从网站下载数据并将其保存到文本文件。如果有错误,则使用log4net记录。

基本的循环是这样的:

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

以下是发生异常时在控制台窗口中显示的唯一消息:(不显示堆栈跟踪)

Process is terminated due to StackOverflowException
Run Code Online (Sandbox Code Playgroud)

我的控制台应用程序完全冻结,并弹出一个对话框窗口,显示以下信息(关闭此对话框也会终止我的应用程序)

 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
Run Code Online (Sandbox Code Playgroud)

我可以找到有关崩溃的信息的唯一其他地方是Windows事件日志中:

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>
Run Code Online (Sandbox Code Playgroud)

*****更新解决方案*****

我已经放弃尝试在.Net中处理此异常。我找到了有效的解决方法。此解决方法适用于Windows,特别是具有事件查看器的任何版本。

解决方法说明。

1)打开控制面板->管理工具->事件查看器-> Windows日志->应用程序。

2)选择有问题的事件。在我的情况下,它的状态为ERROR,并且与您在上面看到的示例匹配。

3)在右侧,单击“将任务附加到此事件”。

4)完成向导。就我而言,我重新启动应用程序。

5)保存任务。

6)现在切换到任务计划程序并找到任务。单击属性。单击选项卡,然后根据需要配置任务。

sap*_*ket 4

*****使用解决方案更新 *****

我已经放弃尝试在 .Net 中处理此异常。我找到了一个有效的解决方法。此解决方法适用于 Windows,特别是带有事件查看器的任何版本。

解决方法说明。

1) 打开控制面板->管理工具->事件查看器->Windows 日志->应用程序。

2) 选择违规事件。就我而言,它是状态 ERROR,并且与您在上面看到的示例匹配。

3) 在右侧单击“将任务附加到此事件”。

4) 完成向导。就我而言,我重新启动我的应用程序。

5) 保存任务。

6) 现在切换到任务计划程序并找到该任务。单击属性。单击选项卡并根据需要配置任务。