LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網站管理員

【C#】推薦一種Winform程序崩潰閃退或卡死的分析方法

admin
2025年6月23日 13:32 本文熱度 291

在實際開發(fā)中,經常遇到程序崩潰閃退或者卡死的問題,在遇到這種問題的時候,往往很難捕捉異常,且日志也無法正常記錄到問題發(fā)生的位置。在Windows操作系統(tǒng)中,dump文件就可以記錄并保存程序崩潰時的快照,今天我們通過一個小例子,簡述一種生成dump文件的方法,僅供學習分享使用,如有不足之處,還請指正。


閃退場景

在下面例子中,我們有一個WinForm程序,在FormMain的構造方法中,制造一個除零異常,此異常會導致程序閃退,如下所示:

namespace TestDump{    public partial class FormMain : Form    {        public FormMain()        {            InitializeComponent();            //拋出一個異常            throw new DivideByZeroException();        }    }}
在我們啟動程序時,雙擊軟件,然后發(fā)現(xiàn)程序“轉了幾圈,就消失了”,程序并沒有啟動起來。
當然,上述只是我們的一個小例子,實際工作中,我們并不會制造這么愚蠢的異常出來。

異常分類

根據(jù)異常發(fā)生和處理的機制不同,主要分為如下兩類:

  • 托管異常:托管異常是由 .NET 運行時管理的異常,它們通常在托管代碼中拋出并處理。例如,在 C# 中使用 try-catch 塊捕獲的異常就是托管異常。這些異常通常由 .NET 的類庫拋出,例如 ArgumentNullException, IndexOutOfRangeException 等。
  • 非托管異常:非托管異常是由操作系統(tǒng)或其他非 .NET 代碼(如調用本地庫或使用 P/Invoke 調用 Windows API)拋出的異常。這些異常不是由 .NET 運行時直接管理的,因此需要使用特定的技術來捕獲和處理。

在實際應用中,托管異常容易識別和處理;非托管異常通常需要結合使用托管和原生代碼的技術來處理。


什么是dump文件?

Dump文件是一種包含了程序運行時的內存、寄存器狀態(tài)、堆棧跟蹤等信息的文件,通常用于調試和故障排查。當程序崩潰或發(fā)生異常時,操作系統(tǒng)或程序自身可能會生成一個Dump文件,以便開發(fā)者或技術支持人員能夠分析程序崩潰的原因,并采取相應的修復措施。

Dump文件通常包含以下信息:

  • 程序的內存映像:即程序在崩潰時內存中的數(shù)據(jù)和代碼的狀態(tài)。
  • 寄存器狀態(tài):包括CPU的寄存器在崩潰時的值,這些值對于理解程序崩潰時的上下文非常關鍵。
  • 堆棧跟蹤:記錄了程序崩潰時執(zhí)行的函數(shù)調用序列,有助于確定程序崩潰的具體位置。

不同的操作系統(tǒng)和程序可能會生成不同格式的Dump文件。例如,在Windows操作系統(tǒng)中,應用程序崩潰時可能會生成`.dmp`文件,而在Linux系統(tǒng)中,則可能會生成`core`文件。開發(fā)者或技術支持人員可以使用專門的調試工具來打開和分析這些Dump文件,以便找到并修復導致程序崩潰的問題。


生成dump文件

在 Windows 操作系統(tǒng)中,可以將 Windows 錯誤報告 (WER) 配置為在應用程序崩潰時生成轉儲。具體步驟如下:

在Windows左下角搜索框輸入“regedit”打開注冊表編輯器,如下所示:
在注冊表中,依次打開“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps”,然后創(chuàng)建三個字段,如下所示:

  • DumpFolder:表示Dump生成的目錄,此值的類型為REG_EXPAND_SZ(可擴充字符串)。
  • DumpCount:表示最多生成dump文件的數(shù)量。此值為DWORD的32位整數(shù),默認設置為10
  • DumpType:生成的Dump文件類型:0:自定義類型,1:MiniDump,2:Full Dump。此值為DWORD的32位整數(shù)

具體如下圖所示:

注冊表也可以通過以下命令創(chuàng)建:

reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps"reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps" /v DumpFolder /t REG_EXPAND_SZ /d "C:\mydumps" /freg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps" /v DumpType /t REG_DWORD /d 2 /freg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps" /v DumpCount /t REG_DWORD /d 10 /fpause

復制上述命令,保存在一個后綴為.bat的文件中,然后右擊選擇“以管理員身份運行”即可。如下所示:



分析dump文件

?通過上述步驟,當程序發(fā)生崩潰時,就會在指定的目錄生成dump文件,如下所示:


如果就簡單的.net程序閃退生成的dump文件,可以在Visual Studio 2022中打開dump文件,然后點擊“運行診斷分析”,如下所示:



Visual Studio 2022會自動定位到發(fā)生閃退的異常所在位置,如下所示:




在“診斷分析”頁面,點擊“分析”,可以查看分析結果,然后點擊結果,即可看到分析摘要中顯示的具體異常信息。



當然上述分析只是針對相對簡單的崩潰異常分析,如果復雜的閃退場景,則需要借助專業(yè)的調試工具,如WinDbg等,本文暫不討論。


閱讀原文:原文鏈接


該文章在 2025/6/23 15:13:00 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業(yè)的專業(yè)生產管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國內大量中小企業(yè)的青睞。
點晴PMS碼頭管理系統(tǒng)主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業(yè)務管理,結合碼頭的業(yè)務特點,圍繞調度、堆場作業(yè)而開發(fā)的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點晴WMS倉儲管理系統(tǒng)提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統(tǒng),標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved

黄频国产免费高清视频,久久不卡精品中文字幕一区,激情五月天AV电影在线观看,欧美国产韩国日本一区二区
亚洲综合一区自偷自拍 | 中文字幕亚洲乱码熟女一区二区 | 亚洲专区自拍中文字幕 | 亚洲中文aⅴ中文字幕每天被 | 色综合91久久精品中文字幕 | 亚洲精品NV久久久久久久久久 |