狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

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

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

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

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


閃退場(chǎng)景

在下面例子中,我們有一個(gè)WinForm程序,在FormMain的構(gòu)造方法中,制造一個(gè)除零異常,此異常會(huì)導(dǎo)致程序閃退,如下所示:

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

異常分類

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

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

在實(shí)際應(yīng)用中,托管異常容易識(shí)別和處理;非托管異常通常需要結(jié)合使用托管和原生代碼的技術(shù)來處理。


什么是dump文件?

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

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

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

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


生成dump文件

在 Windows 操作系統(tǒng)中,可以將 Windows 錯(cuò)誤報(bào)告 (WER) 配置為在應(yīng)用程序崩潰時(shí)生成轉(zhuǎn)儲(chǔ)。具體步驟如下:

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

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

具體如下圖所示:

注冊(cè)表也可以通過以下命令創(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

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



分析dump文件

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


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



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




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



當(dāng)然上述分析只是針對(duì)相對(duì)簡(jiǎn)單的崩潰異常分析,如果復(fù)雜的閃退場(chǎng)景,則需要借助專業(yè)的調(diào)試工具,如WinDbg等,本文暫不討論。


閱讀原文:原文鏈接


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