Skip to main content

Command Palette

Search for a command to run...

筆記:Windows App Crash 與 Dump、.NET Crash Handler

Published
2 min read

1️⃣ Windows App Crash Dump

預設情況

  • Windows App crash 時不一定會自動產生 dump。

  • Windows Error Reporting (WER)

    • 可產生 minidump,存放位置:

        %LOCALAPPDATA%\CrashDumps
        C:\ProgramData\Microsoft\Windows\WER\ReportArchive
      
    • 若沒有啟用 LocalDumps 設定,dump 可能不會留下。

強制生成 Dump(未驗證)

  • 註冊表設定 LocalDumps

      [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps]
      "DumpFolder"=hex(2):43,00,3a,00,5c,00,64,00,75,00,6d,00,70,00,00,00
      "DumpType"=dword:00000002
    
    • DumpFolder → 指定 dump 存放資料夾

    • DumpType → 1 = minidump, 2 = full dump

  • 使用 ProcDump 自動生成 dump

    • 命令範例:

        procdump.exe -ma -e -x C:\dumps ConsoleApp6.exe
      
      • -ma → full dump

      • -e → 當遇到未處理例外時產生 dump

      • -x C:\dumps → dump 存放資料夾

      • ConsoleApp6.exe → 要啟動並監控的程式


2️⃣ .NET 程式自訂 Crash Handler

概念

  • 可在程式內捕捉未處理的例外,並生成 dump

  • 使用:

    • AppDomain.CurrentDomain.UnhandledException 捕捉全域未處理例外

    • P/Invoke 呼叫 MiniDumpWriteDump 寫出 dump

範例程式(未驗證)

AppDomain.CurrentDomain.UnhandledException += (s, e) =>
{
    string dumpPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, 
        $"CrashDump_{DateTime.Now:yyyyMMdd_HHmmss}.dmp");

    using (var fs = new FileStream(dumpPath, FileMode.Create, FileAccess.Write, FileShare.None))
    {
        var currentProcess = Process.GetCurrentProcess();
        MiniDumpWriteDump(currentProcess.Handle, (uint)currentProcess.Id,
            fs.SafeFileHandle.DangerousGetHandle(), MINIDUMP_TYPE.MiniDumpWithFullMemory,
            IntPtr.Zero, IntPtr.Zero, IntPtr.Zero);
    }
};
  • MiniDumpWriteDump 可選 flag 生成不同類型 dump:

    • MiniDumpNormal → 小型 dump

    • MiniDumpWithFullMemory → full memory dump

  • dump 會存放在程式目錄,方便 crash 後分析。

用途

  • 對桌面 App (Console / WPF / WinForms) 都適用

  • 可結合 ProcDump 做雙重保護(程式內捕捉 + 外部監控)


3️⃣ 建議做法

  1. 對重要 App,啟用 LocalDumps 或 ProcDump 監控

  2. 對 .NET App,可在程式內加 UnhandledException handler + MiniDumpWriteDump

  3. dump 生成後,用 WinDbg + SOS / C# extension 分析記憶體與 crash stack

More from this blog

Android Edge-to-Edge & View 類型筆記

1️⃣ enableEdgeToEdge() 作用:讓 Activity 畫面延伸到 狀態列 / 導覽列 底下。 預設行為: 狀態列透明。 導航列自動套用 scrim(半透明遮罩)確保對比度,API 29+ 支援自動亮暗判斷。 好處:畫面可以全螢幕顯示,UI 更現代化。 2️⃣ ViewCompat.setOnApplyWindowInsetsListener(...) 作用:監聽系統 WindowInsets(安全區域)。 用途:避免內容被狀態列 / 導覽列擋住。 範...

Aug 18, 20251 min read

公司 Proxy 下 npm install 的 SSL 問題解法

在公司網路有 Proxy 或自簽憑證 (self-signed cert) 的情況下,執行 npm install 可能會遇到 SSL 認證錯誤。 以下是常見的解法: 🔧 解法一:關閉 SSL 驗證 npm config set strict-ssl false 缺點:不安全,會允許不可信憑證。 🔧 解法二:指定公司憑證檔案 npm config set cafile <path-to-cert> 讓 npm 認得公司 CA,推薦這種做法(比完全關閉驗證安全)。 🔧 解法...

Aug 18, 20251 min read

Tech notes

5 posts