调试器无法捕获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.");
}
// Wait and make sure it has exited
Thread.Sleep(5000);
这就是问题陈述。在代码中调用SetConsoleCtrlHandler()来调用Handler方法。Windows要求控件处理程序具有响应性,并且从回调中返回的时间不会太长。CTRL_CLOSE_EVENT的超时正好是 5秒,这解释了为什么它有时可以工作。如果需要更长的时间,Windows就会终止这个进程。
你需要以不同的方式实现TerminateProcess。终止一个进程是相当武断的,你最好不要这么做。或者启动另一个守卫过程。但是我不能打那个电话
0xC000013A:应用程序由于Ctrl+ c而终止。
这是因为您关闭了控制台窗口,而应用程序不希望您这样做,所以Windows为您终止了它。
对不起,但是我不知道如何在托管代码中捕获控制台窗口关闭事件。