c# - C# 控制台应用程序中未处理的异常导致 AppCrash

标签 c# exception error-handling unhandled-exception

我有一个在 Visual Studio 2010 中构建的 Windows 控制台应用程序,它不断崩溃,但 Visual Studio 调试工具或代码中的 try/catch 语句都没有捕获该错误。

我已设法在我的系统上找到 WER 文件,并且希望能够了解该文件的内容,以便我可以准确地查明导致未处理异常的原因。

如果有人能够提供一些关于如何使用以下信息来定位导致我出现此问题的进程以及可能出现的异常的想法,我将不胜感激......

WER 文件中的信息是:

Version=1
EventType=APPCRASH
EventTime=129973086237604286
ReportType=2
Consent=1
ReportIdentifier=91331e8b-2dc8-11e2-977b-080027f7e5bb
IntegratorReportIdentifier=91331e8a-2dc8-11e2-977b-080027f7e5bb
WOW64=1
Response.type=4
Sig[0].Name=Application Name
Sig[0].Value=SAGE_TESTING.vshost.exe
Sig[1].Name=Application Version
Sig[1].Value=10.0.30319.1
Sig[2].Name=Application Timestamp
Sig[2].Value=4ba2084b
Sig[3].Name=Fault Module Name
Sig[3].Value=ntdll.dll
Sig[4].Name=Fault Module Version
Sig[4].Value=6.1.7600.16385
Sig[5].Name=Fault Module Timestamp
Sig[5].Value=4a5bdb3b
Sig[6].Name=Exception Code
Sig[6].Value=c015000f
Sig[7].Name=Exception Offset
Sig[7].Value=000845bb
DynamicSig[1].Name=OS Version
DynamicSig[1].Value=6.1.7600.2.0.0.272.7
DynamicSig[2].Name=Locale ID
DynamicSig[2].Value=2057
DynamicSig[22].Name=Additional Information 1
DynamicSig[22].Value=0a9e
DynamicSig[23].Name=Additional Information 2
DynamicSig[23].Value=0a9e372d3b4ad19135b953a78882e789
DynamicSig[24].Name=Additional Information 3
DynamicSig[24].Value=0a9e
DynamicSig[25].Name=Additional Information 4
DynamicSig[25].Value=0a9e372d3b4ad19135b953a78882e789

这是我认为导致抛出异常的代码部分:

//Data from the project linked to the split data
if (oSplitData.Project != null)
{
    oProject = oSplitData.Project as SageDataObject190.Project;

    oBasicDetail.ProjectID = oProject.ProjectID;
    oBasicDetail.ProjectReference = oProject.Reference.ToString();
}
else
{
    oBasicDetail.ProjectID = -1;
    oBasicDetail.ProjectReference = "NO_PROJECT";
}

除了上述所有内容之外,我似乎发现抛出了一个普遍的异常,但这对我没有多大帮助 - 如果有人可以对此进行一些说明,那就太好了:

Unhandled exception at 0x78bc7361 in SAGE_TESTING.exe: 0xC0000005: Access violation reading location 0xfeeefeee.

最佳答案

如果您的程序是多线程的,并且异常是在生成的线程之一中引发的,则可能无法捕获异常,具体取决于您在程序中进行异常处理的方式。

您可以添加一个捕获所有异常的处理程序,如下所示:

class Program 
{
    static void Main(string[] args) 
    {
        AppDomain.CurrentDomain.UnhandledException += UnhandledExceptionHandler;
        // Your code here
    }

    static void UnhandledExceptionHandler(object sender, UnhandledExceptionEventArgs e) 
    {
        Console.WriteLine(e.ExceptionObject.ToString());
        Environment.Exit(1);
    }
}

更新

根据您发布的代码,这里有一些需要注意的事项

  • 在您发布的代码周围放置一个 try/catch block 。
  • 您确定oSplitData不为空吗?
  • 在下面的行中,如果 oSplitData.Project 不是 SageDataObject190.Project 类型,则 oProject 将为 null。测试null

    oProject = oSplitData.Project 作为 SageDataObject190.Project;

关于c# - C# 控制台应用程序中未处理的异常导致 AppCrash,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13368272/

相关文章:

c# - 避免为不同的代码执行重复for循环

c# - 如果删除了链接到事件的控件,事件处理程序是否也会从内存中删除?

c# - 使用 C# 将带有快照的虚拟机保留在域中

c# - 如何使用 C# 在命令模式中的命令之间共享相同的上下文?

python - 避免函数内部出现 ZeroDivisionError

r - 在R中的自定义错误处理程序中获取回溯

c# - 饮食异常(exception)

Java:确切的异常类型有多重要

python - 运行 `python -m unittest` 会更改在回溯中打印覆盖 `__name__` 的异常的方式

java - 为什么 "catch" block 一定需要异常类型?