当部署到Linux环境时,Environment.FailFast在.NET Core中会做什么?

1mrurvl1  于 5个月前  发布在  Linux
关注(0)|答案(2)|浏览(62)

这个方法的文档说:
在将消息写入Windows应用程序事件日志后立即终止进程,然后在向Microsoft报告的错误中包含该消息和可选的异常信息。
但是,如果部署到没有EventLog或Windows错误报告的Linux环境中,情况又会怎样呢?
我希望能够以这种方式立即终止控制台应用程序,但不清楚这是否是正确的方法。对于Linux,有更好的方法吗?
计划是让我的控制台应用程序在Linux容器中运行。我希望应用程序能够终止,从而导致容器终止,因此基础设施可以启动一个新的。然而,我刚刚开始使用Docker(我的Linux技能非常生疏)。所以我在这里不知所措.
我可能不得不旋转一个小样本,只是修修补补,但希望在这里问这个问题,以防有人可以提供一个更快的答案。
Tia

u4dcyp6a

u4dcyp6a1#

什么都不如试试看!

using System;

namespace testing
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
            System.Environment.FailFast("oh shoot");
            Console.WriteLine("Bye!");
        }
    }
}

字符串
给我

/tmp/testing$ dotnet run
Hello World!
FailFast:
oh shoot

   at System.Environment.FailFast(System.String, System.Exception)
   at System.Environment.FailFast(System.String)
   at testing.Program.Main(System.String[])


我在/var/log中没有看到任何额外的日志消息。所以我猜它只是快速存在并将日志转储到控制台。

kulphzqa

kulphzqa2#

除了stimulus已经描述的行为之外,它还做了一件事:如果设置了DOTNET_DbgEnableMiniDump环境变量,这将创建一个崩溃转储。
您可以在https://github.com/dotnet/runtime/blob/88b5e3d4b77dd8238331ade1b31ac8ddc62f22f7/src/coreclr/nativeaot/System.Private.CoreLib/src/System/RuntimeExceptionHelpers.cs#L181上看到FailFast的源代码,在那里您可以确切地看到它写入stderr的内容。
它决定是否对它收集的信息做任何其他事情(除了将其写入stderr)的行如下:
https://github.com/dotnet/runtime/blob/88b5e3d4b77dd8238331ade1b31ac8ddc62f22f7/src/coreclr/nativeaot/System.Private.CoreLib/src/System/RuntimeExceptionHelpers.cs#L283-L288
您可以看到它在中止进程之前调用了一个名为RhCreateCrashDumpIfEnabled的方法。

相关问题