gpt4 book ai didi

c# - C# 应用程序中的 Environment.FailFast

转载 作者:可可西里 更新时间:2023-11-01 14:41:54 26 4
gpt4 key购买 nike

我想了解 C# 应用程序中的 Environment.FailFast 规则。所以,我编写了这段代码:

  public static void Main()
{
string strInput = GetString();
Console.WriteLine(strInput);
Console.ReadKey();
}

private static string GetString()
{
Console.WriteLine("Get string");
string s = Console.ReadLine();
try
{
if (s == "Exit")
{
Environment.FailFast("Erreur fatale");
return s;
}
else
{
return s;
}
}
catch (Exception)
{
return "catch";
}
finally
{
s += "finally";
}
}

据我所知,消息被写入 Windows 应用程序事件日志 并且应用程序终止。

当我运行应用程序并将 Exit 作为字符串时:

  1. 调试器指示错误:

enter image description here

  1. 我尝试查找事件日志文件,如 msdn 中所示, 但我没找到 enter image description here

我不明白为什么应用程序没有抛出异常就没有关闭?对于第二点,如何在我的电脑中找到日志文件?

最佳答案

Environment.FailFast(string) 立即退出应用程序,不允许在对象上运行任何 catch 语句或终结器。

只有当您的应用程序的状态处于永远无法恢复的状态时,您才应该使用此方法,并且退出应用程序是确保不会发生比崩溃更糟糕的事情的唯一方法。在您的示例中,使用带有退出代码的 Environment.Exit 更合适,因为它看起来是一种优雅的退出,而不是强制退出损坏状态。

一般来说,建议在附加调试器时不要使用 FailFast - 这是 documented in the System.Diagnostics.Assert class :

// However, in CLR v4, Environment.FailFast when a debugger is attached gives you an MDA 
// saying you've hit a bug in the runtime or unsafe managed code, and this is most likely caused
// by heap corruption or a stack imbalance from COM Interop or P/Invoke. That extremely
// misleading error isn't right, and we can temporarily work around this by using Environment.Exit
// if a debugger is attached. The right fix is to plumb FailFast correctly through our native
// Watson code, adding in a TypeOfReportedError for fatal managed errors. We may want a contract-
// specific code path as well, using COR_E_CODECONTRACTFAILED.

这意味着您在 Visual Studio 中看到的异常归结为 CLR 中的错​​误,可以安全地忽略。

他们的解决方法如下:

if (Debugger.IsAttached) 
Environment.Exit(COR_E_FAILFAST);
else
Environment.FailFast(message);

这意味着在附加调试器的情况下运行时,您不会写入事件日志消息,而在发行版中则会写入。

关于c# - C# 应用程序中的 Environment.FailFast,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30048511/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com