7

我的程序经常由于某种原因崩溃。在这种情况下,我确实看到带有“关闭”按钮的 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
4

4 回答 4

10

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

此类错误的最常见原因是以下两个:

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

如果您无法在开发环境中调试应用程序,您可能必须使用Windows 调试工具来找出问题所在。

于 2012-11-16T08:39:53.203 回答
0

您可以尝试使用 WER - Microsoft 的 Windows 错误报告。它在每个系统上都是默认的。因此,例如,您可以进行自动转储而不是窗口弹出消息。
组策略编辑器中有许多设置。请参阅以下链接 http://msdn.microsoft.com/en-us/library/windows/desktop/bb787181(v=vs.85).aspx http://msdn.microsoft.com/en-us/library/ windows/桌面/bb513638%28v=vs.85%29.aspx

于 2012-11-16T08:27:46.753 回答
0

我知道这是一个老问题,但我在谷歌搜索异常代码 0xc0000374 后来到这里。

有一个可用于 MS Visual C++ 2013 Redistributable 包的更新,它修复了 MS Visual C++ 2013 Redistributable 包中的堆损坏错误。

注意:此更新(在撰写本文时)未通过 Windows 更新分发。注意 2:显然,如果您使用的是使用 MS VC++ 2013 编译的库(如我的情况:MySQL ODBC 连接器 5.3.x),此更新只会有帮助

更新链接: https: //support.microsoft.com/en-us/help/3138367/update-for-visual-c-2013-and-visual-c-redistributable-package

以及将我指向此更新的来源:https ://bugs.mysql.com/bug.php?id=86054

于 2018-10-19T13:21:32.230 回答
-3

只需在您认为可能崩溃的代码“危险”部分使用try catch 。

于 2012-11-16T08:17:20.003 回答