dotnet獨立打包 如何設定崩潰自動生成dump

China Soft發表於2024-10-15

在.NET應用程式中,可以透過設定環境變數來實現崩潰時自動生成dump檔案。以下是如何設定環境變數以及相關的程式碼示例:

設定環境變數:

在Windows系統中,可以透過以下步驟設定環境變數:

開啟“系統屬性” -> “高階” -> “環境變數”。

在“系統變數”下,點選“新建”,新增以下變數:

變數名:COMPlus_DbgEnableMiniDump

變數值:1

另外,可以設定一個路徑來指定dump檔案的儲存位置,例如:

變數名:COMPlus_DbgMiniDumpName

變數值:<path>\myapp.dump(替換<path>為實際的路徑)

在Linux系統中,可以透過在shell中執行以下命令來設定環境變數:

export COMPlus_DbgEnableMiniDump=1
export COMPlus_DbgMiniDumpName=/path/to/myapp.dump

程式碼示例(僅供參考,實際上設定環境變數是在應用程式外部進行的):

如果需要在程式碼中強制生成dump檔案,可以使用以下示例程式碼:

using System;
using System.Diagnostics;
using System.Runtime.InteropServices;

public class DumpCreator
{
[DllImport("kernel32.dll", EntryPoint = "SetEnvironmentVariableA")]
private static extern int SetEnvironmentVariable(string lpName, string lpValue);

public static void EnableMiniDump()
{
// 設定環境變數以啟用MiniDump
SetEnvironmentVariable("COMPlus_DbgEnableMiniDump", "1");
// 設定MiniDump檔案的路徑(可選)
SetEnvironmentVariable("COMPlus_DbgMiniDumpName", @"C:\path\to\your\app.dump");
}

public static void CreateMiniDump(Exception e)
{
// 在需要的時候呼叫此方法來建立MiniDump
// 例如,在全域性異常處理中
var fileName = @"C:\path\to\your\app.dump"; // 使用實際的路徑和檔名
var currentProcess = Process.GetCurrentProcess();
MiniDumpWriteDump(currentProcess.Handle, (uint)currentProcess.Id, fileName, 2, 0);
}

[DllImport("dbghelp.dll", EntryPoint = "MiniDumpWriteDump", CallingConvention = CallingConvention.StdCall)]
private static extern bool MiniDumpWriteDump(IntPtr hProcess, uint processId, string fileName, uint dumpType, IntPtr exceptionParam);
}

// 在程式初始化時呼叫
DumpCreator.EnableMiniDump();

// 在需要建立dump時呼叫
// DumpCreator.CreateMiniDump(new Exception("Forced mini dump"));

請注意,生成dump檔案需要dbghelp.dll庫,它通常是.NET Framework的一部分,或者可以從Microsoft的網站上獲取。在使用MiniDumpWriteDump函式時,需要引入dbghelp.dll庫。如果是在.NET Core或.NET 5+上,可能需要額外的NuGet包來提供相同的功能。

相關文章