调试器无法捕获c#崩溃

本文关键字:崩溃 调试器 | 更新日期: 2023-09-27 18:08:09

我有一个非常大的项目,最近刚开始在退出时崩溃。我不是最伟大的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.");
}

调试器无法捕获c#崩溃

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

这就是问题陈述。在代码中调用SetConsoleCtrlHandler()来调用Handler方法。Windows要求控件处理程序具有响应性,并且从回调中返回的时间不会太长。CTRL_CLOSE_EVENT的超时正好是 5秒,这解释了为什么它有时可以工作。如果需要更长的时间,Windows就会终止这个进程。

你需要以不同的方式实现TerminateProcess。终止一个进程是相当武断的,你最好不要这么做。或者启动另一个守卫过程。但是我不能打那个电话

0xC000013A:应用程序由于Ctrl+ c而终止。

这是因为您关闭了控制台窗口,而应用程序不希望您这样做,所以Windows为您终止了它。

对不起,但是我不知道如何在托管代码中捕获控制台窗口关闭事件。