调试器未捕获到 C# 崩溃

标签 c# debugging exception crash exit-code

我有一个相当大的项目,最近刚开始在退出时崩溃。我不是最好的 C# 编码员,但一切通常都按预期工作。然而,在这种情况下,当我关闭我的控制台应用程序时,它崩溃了,但没有被 MSVC 调试器捕获。

1) 当我在 Release 中构建并运行它时,它通常总是在我退出时崩溃。

2) 当我在 Debug 中构建并运行它时,它似乎只有 3-5 次中的 1 次在退出时崩溃。

虽然它没有正确退出,但我确实设法得到了错误,但不幸的是,退出代码与我在网上找到的任何内容都不匹配。

The program '[11108] MCDaemon.vshost.exe: Managed (v4.0.30319)' has exited with code -1073741510 (0xc000013a).

从我读到的其他人的问题来看,这通常是由非托管代码引起的。有没有什么方法可以让我真正找出缺少大量调试行的问题?

编辑

从下面的答案来看,这是导致退出代码的代码,但我真的没有发现任何问题。

public static Boolean Handler(MyWin32.CtrlTypes CtrlType)
{
    // A switch to handle the event type.
    switch (CtrlType)
    {
        case MyWin32.CtrlTypes.CTRL_C_EVENT:
            Program.TerminateProcess();
            break;
        case MyWin32.CtrlTypes.CTRL_CLOSE_EVENT:
            Program.TerminateProcess();
            break;
    }

    return true;
}

public static void TerminateProcess()
{
    // Stop the Poll Timer from Running
    PollTimer.Stop();

    log.LogMessage("Process is being Shutdown.");
    log.LogMessage("Requesting Process to Stop....");
    SendProcessCmd("stop");

    // Wait and make sure it has exited
    Thread.Sleep(5000);

    if (!myProcess.HasExited)
    {
        log.LogMessage("My Process did not stop on its own, forcing Process to quit.");
        myProcess.Kill();
    }

    log.LogMessage("My Process has been Shutdown.");
}

最佳答案

// Wait and make sure it has exited
Thread.Sleep(5000);

这就是问题陈述。你正在调用 SetConsoleCtrlHandler()在您的代码中调用您的 Handler 方法。 Windows 要求控制处理程序能够响应并且不会花太长时间从回调中返回。 CTRL_CLOSE_EVENT 的超时时间恰好 5 秒,这解释了为什么它有时会起作用。如果花费的时间更长,则 Windows 会终止该过程。

您需要以不同方式实现 TerminateProcess。杀死一个进程是相当随意的,你最好不要这样做。或者启动另一个守卫进程。不过我不能打电话。

关于调试器未捕获到 C# 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7340469/

相关文章:

api - 如何阻止 Python 中的 Keyerror 再次发生或创建异常来处理它?

c# - 任务吞下抛出的异常

c# - 启动 Kestrel ASP.NET 服务器的证书问题 - Windows 10、C#、VS2019

visual-studio - Visual Studio 加载符号

c# - 检查 String 是否可以转换为 C# 中的给定类型

c++ - GDB 在调试时损坏 - 没有控制台输出?

在 Visual Studio Code 中调试?

java - java如何实现finally block

c# - 如何在本地化字符串中包含变量?

c# - 通过套接字发送自定义 WCF 请求