如何在.NET程序崩潰時自動創建Dump?( 二 )

  • 4: Full 最大的轉儲,包含所有內存(包括模塊映像) 。
  • 【如何在.NET程序崩潰時自動創建Dump?】一般情況下,我們會配置下面的環境變量:
    DOTNET_DbgEnableMiniDump = 1DOTNET_DbgMiniDumpName = [有權限的Path目錄]DOTNET_CreateDumpDiagnostics = 1DOTNET_EnableCrashReport = 1試一試我們寫一段代碼來試一把,如下有一段代碼首先輸出了當前DTONET_前綴對的環境變量,然后拋出一個異常 。
    using System.Collections;foreach (DictionaryEntry environmentVariable in Environment.GetEnvironmentVariables()){if(environmentVariable.Key.ToString()?.StartsWith("DOTNET_") == false) continue;Console.WriteLine($"{environmentVariable.Key}={environmentVariable.Value}");}throw new Exception("Crash");然后編寫一個run.bat腳本,用于設置環境變量順便啟動我們的程序 。
    @SET DOTNET_DbgEnableMiniDump=1@SET DOTNET_DbgMiniDumpName="G:\Temp\CrashDump\CrashDump\bin\Debug\net6.0\dump.dmp"@SET DOTNET_CreateDumpDiagnostics=1@SET DOTNET_EnableCrashReport=1@CrashDump.exe運行run.bat可以看到環境變量正確的讀到了,另外也成功的生成了Dump 。
    如何在.NET程序崩潰時自動創建Dump?

    文章插圖
    最后在對應的目錄下,也生成了Dump文件 。
    如何在.NET程序崩潰時自動創建Dump?

    文章插圖
    如果是在容器環境中的話,直接修改Dockerfile即可,如下所示的那樣:
    如何在.NET程序崩潰時自動創建Dump?

    文章插圖
    如果在容器環境中,DOTNET_DbgMiniDumpName需要配置映射到Host的目錄 , 不然容器退出,Dump文件也會隨之消失 。
    總結本文主要是介紹了如何在dotNet程序崩潰時自動創建Dump , Windows上的方法對于.NET Freamwork和.NET Core版本都適用 。.NET Core全平臺版本的話需要注意環境變量支持的.NET版本 。
    參考文獻
    • https://learn.microsoft.com/en-us/troubleshoot/developer/webapps/aspnetcore/practice-troubleshoot-linux/lab-1-3-capture-core-crash-dumps
    • https://www.meziantou.net/tip-automatically-create-a-crash-dump-file-on-error.htm
    • https://github.com/dotnet/runtime/blob/main/docs/design/coreclr/botr/xplat-minidump-generation.md

    推薦閱讀