建立.NET程式Dump的幾種姿勢

2022-11-01 12:01:45

當一個應用程式執行的有問題時,生成一個Dump檔案來偵錯它可能會很有用。在Windows、Linux或Azure上有許多方法可以生成轉儲檔案。

Windows平臺

dotnet-dump (Windows)

dotnet-dump全域性工具是一種收集和分析.NET核心應用程式Dump的方法。

  1. 安裝 dotnet-dump (必須要 .NET SDK) 或者 直接下載

    dotnet tool install --global dotnet-dump
    
  2. 使用ps命令找到程序Id

    dotnet-dump ps
    
  3. 通過指定的程序id建立dump檔案

    dotnet-dump collect --process-id <ProcessId>
    

Windows 工作管理員

  1. 按下 Ctrl+Shift+Esc 開啟 Windows 工作管理員
  2. 選擇"詳細資訊"索引標籤
  3. 在列表中找到你的應用程式
  4. 右擊它,然後選擇 "建立轉儲檔案"

SysInternals - Process Explorer

  1. 下載 Process Explorer: Process Explorer
  2. 開啟 Process Explorer
  3. 右擊程序選擇 "Create Dump" 項

]

SysInternals - ProcDump (Windows)

ProcDump是一個命令列工具,當應用程式假死或程序使用太多的CPU時,可以生成一個Dump檔案。

  1. 下載 ProcDump: ProcDump

  2. 使用程序名或者程序Id建立dump

    procdump notepad
    
    procdump 4572
    

偵錯診斷工具

偵錯診斷工具允許在滿足某個條件時生成一個轉儲檔案。例如,當應用程式崩潰或CPU使用率高時,它可以生成一個Dump檔案。

  1. 下載 Debug Diagnostic Tool v2 Update 3
  2. 點選 "DebugDiag 2 Collection" (在開始選單中可用)
  3. 設定一個規則,比如說當應用程式崩潰的時候
  4. 當條件得到滿足時,會在設定的資料夾中生成一個崩潰Dump。

Visual Studio

如果你正在偵錯一個應用程式,你可以直接從Visual Studio儲存一個轉儲檔案。開啟 "偵錯 "選單,點選 "將轉儲另存為... "選單項。

WinDbg

如果你正在使用WinDbg偵錯一個應用程式,你可以使用.dump命令來生成一個轉儲檔案。/ma選項允許為所有連線的程序生成一個minidump:

.dump /ma [path]

Windows Error Reporting

Windows錯誤報告允許在應用程式崩潰時生成一個轉儲檔案。你可以檢視我以前關於它的貼文。出錯時自動建立崩潰轉儲檔案 "Tip: 在出錯時自動建立一個崩潰轉儲檔案"。

Linux

dotnet-dump (Linux)

dotnet-dump全域性工具是一種收集和分析.NET核心應用程式轉儲的方法。

  1. 安裝 dotnet-dump (必須 .NET SDK) 或者 下載它

    dotnet tool install -g dotnet-dump
    
  2. 使用下面的命令找到程序Id

    dotnet-dump ps
    
  3. 通過指定的程序id建立dump檔案

    dotnet-dump collect --type heap --process-id <ProcessId>
    

SysInternals - ProcDump (Linux)

ProcDump是一個命令列工具,當應用程式凍結或使用太多的CPU時,可以生成一個Dump檔案。

  1. 下載 ProcDump for Linux: ProcDump For Linux

  2. 使用程序名或者程序Id建立dump

    procdump 4572
    

Azure App Services

Azure允許我們為App服務生成和分析Dump檔案。

  1. 選擇你的應用程式服務

  2. 轉到 "診斷和解決問題"

  3. 選擇 "診斷工具"

  4. 選擇 "收集記憶體轉儲"

  5. 點選 "收集記憶體轉儲 "按鈕

  6. 幾分鐘後,轉儲在設定的儲存賬戶中可用。

版權

原文版權:Meziantou
翻譯版權:InCerry
原文連結:
https://www.meziantou.net/how-to-generate-a-dump-file-of-a-dotnet-application.htm