c# - 当 C# 程序崩溃时如何知道为什么?

标签 c#

我的程序经常因某种原因崩溃。在这种情况下,我确实看到带有“关闭”按钮的 Windows 消息。每次这样的事情发生,我真的很想知道发生了什么。

感谢社区,我已经知道如何“处理”某些情况,我在程序的开头添加了这样的代码:

    static void Main(string[] args)
    {
        AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;

        TaskScheduler.UnobservedTaskException +=
        (object sender, UnobservedTaskExceptionEventArgs excArgs) =>
        {
            Log.Push(LogItemType.Error, "Exception occured. Task terminated! + " + excArgs.Exception);
            excArgs.SetObserved();
        };

    .....

    static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
    {
        Console.WriteLine("Error: CurrentDomain_UnhandledException entered.");
        string message = (e.ExceptionObject as Exception).Message;
        Console.WriteLine(message);
        System.Diagnostics.Trace.WriteLine(message, "Unhandled UI Exception");
        Log.Push(LogItemType.Error, message);
    }

有时这会有所帮助。但有时程序只是崩溃而没有任何消息。我还可以做些什么?每次程序崩溃我都想知道为什么。

upd Windows 日志几乎包含我需要的一切,除了最重要的东西 - 堆栈跟踪

Faulting application name: MBClient.exe, version: 1.0.0.0, time stamp: 0x50a5da1d
Faulting module name: ntdll.dll, version: 6.1.7601.17725, time stamp: 0x4ec4aa8e
Exception code: 0xc0000374
Fault offset: 0x00000000000c40f2
Faulting process id: 0x10f8
Faulting application start time: 0x01cdc3c2041e2607
Faulting application path: C:\Oleg\bin\mbclient\MBClient.exe
Faulting module path: C:\Windows\SYSTEM32\ntdll.dll
Report Id: 810c805d-2fc3-11e2-bfb5-2c768a509157

最佳答案

异常代码 0xc0000374 表示您正面临堆损坏

导致此类错误的最常见原因有以下两个:

  • 有故障的 RAM 模块
  • 缓冲区溢出,当一个线程试图读取某些内容而另一个线程同时删除了数据时。据我所知,这不应该发生在托管代码中。

你可能必须得到 Windows Debugging Tools如果您无法在开发环境中调试应用程序,找出问题所在。

关于c# - 当 C# 程序崩溃时如何知道为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13412672/

相关文章:

c# - 跟踪已完成/正在运行的 System.Threading.Tasks.Task 对象

c# - 如何使用 C# 更新列表中的条目

c# - 错误 : typeInitializationException

c# - 如何调试 ASP.NET Boilerplate Web API?

c# - itextsharp 不关心我的 html 样式

c# - 不显示 C# 的扩展字符

C# - 修改 DaraGridView 中 column1 的值并将它们放入新列

c# - 将数组从 c++ 传递到 c#,然后按值或按引用返回,哪个更好,为什么?

c# - 命令行 C# 编译有什么意义?

c# - 有没有办法为枚举类型实现一元运算符?