c#应用程序中的Environment.FailFast
我想了解c#应用程序中的c#应用程序中的Environment.FailFast,c#,.net,windows,debugging,exception,C#,.net,Windows,Debugging,Exception,我想了解c#应用程序中的环境.FailFast规则。因此,我制定了以下代码: public static void Main() { string strInput = GetString(); Console.WriteLine(strInput); Console.ReadKey(); } private static string GetString() { Console.WriteLine("Get
环境.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
作为字符串放入时:
我不明白为什么应用程序没有关闭而不抛出异常?关于第二点,我如何在我的电脑中找到日志文件?我用以下代码重建了您的问题:
static void Main(string[] args)
{
try
{
Console.WriteLine("Foo");
Environment.FailFast("WOHO!");
}
finally { }
}
在调试器下运行此时,我也没有看到任何注册的异常。在不使用调试器的情况下运行此(Ctrl+F5)会使异常正确地显示在事件查看器中(请参阅@aevitas ANSWERT或read了解发生这种情况的原因):
环境。FailFast(字符串)
立即退出应用程序,而不允许在对象上运行任何catch
语句或终结器
只有当应用程序的状态处于无法恢复的状态时,才应使用此方法,并且退出应用程序是确保不会发生比崩溃更糟糕的情况的唯一方法。在您的示例中,使用带有退出代码的Environment.Exit
更合适,因为它看起来是一个优雅的退出,而不是一个被迫通过损坏状态的退出
通常,建议在连接调试器时不要使用FailFast,这是:
这意味着您在VisualStudio中看到的异常是CLR中的一个bug,可以安全地忽略它
他们的工作方法如下:
if (Debugger.IsAttached)
Environment.Exit(COR_E_FAILFAST);
else
Environment.FailFast(message);
这意味着在附加了调试器的情况下运行时,不会写入事件日志消息,而在发布时会写入事件日志消息 在事件查看器中,展开左侧面板上的“Windows日志”(或“Journaux Windows”),然后单击“应用程序”。@dcastro我得到一个空列表
if (Debugger.IsAttached)
Environment.Exit(COR_E_FAILFAST);
else
Environment.FailFast(message);