程式崩潰時自動記錄minidump的c 類

2021-07-04 20:16:55 字數 2121 閱讀 9375

封裝了乙個c++類,當程式意外崩潰的時候可以生成dump檔案,以便確定錯誤原因。

標頭檔案:

1

//crash_dumper_w32.h23

#ifndef _crash_dumper_h_45

#define _crash_dumper_h_67

8 #include 9

10class

crashdumper

1112;29

3031

namespace

3233

3738

#endif

實現檔案:

1

crash_dumper_w32.cpp23

45 #include 6

7 #include 8

9 #include 10

11 #include

1213

1415 #include "

crash_dumper_w32.h"16

1718

19#ifdef unicode

2021

# define tstring wstring

2223

#else

2425 # define tstring string

2627

#endif

2829

3031

#pragma comment(lib, "dbghelp.lib")

3233

3435

crashdumper dumper;

3637

3839

crashdumper::crashdumper()

4041

4647

4849 crashdumper::~crashdumper()

5051

5657

5859 long winapi crashdumper::exceptionfilter(struct _exception_pointers*exceptioninfo)

6061

104105

106107

closehandle(hfile);

108109

}110

111}

112113

114115

closehandle(hprocess);

116117

}118

119120

121if

(bdumpok)

122123 messagebox(null, text("

本程式遇到未處理的異常,minidump檔案已經生成在程式的執行目錄。

"), text("提示"

), mb_ok);

124125

else

126127 messagebox(null, text("

本程式遇到未處理的異常,生成minidump檔案失敗。

"), text("提示"

), mb_ok);

128129

130131

return

exception_execute_handler;

132133

}134

135136

bool crashdumper::_placeholder()

**很簡單,唯一需要提一下的是下面的一句**,這個技巧是為了解決當crash_dumper_w32.cpp檔案被編譯成單獨的靜態庫在程式中使用不起作用的問題。

namespace

之所以在靜態庫中.cpp中的**不起作用,是因為沒有**去呼叫crash_dumper_w32.cpp的**,鏈結的時候就被編譯器給丟掉了。上面的語句在匿名空間中定義了乙個變數,這樣,每乙個包含它的.cpp檔案就「被迫」建立了乙個不可訪問的bplaceholder變數,而該變數又必須使用crashdumper::_placeholder()函式來初始化。crash_dumper_w32.cpp檔案的**就被強制鏈結進來了。

此外,如果是服務型別的程式,還可以在異常處理函式中增加自動啟動新例項的功能,以保證服務不間斷。

SecureCRT自動記錄日誌

現在管理的資料庫數量多,實時性強,經常遇到資料庫突發事件,每次做的關鍵步驟操作我都保留乙份日誌,把所有的操作和輸出的內容保留下來,一方面是處理完畢問題之後能做總結,看看處理過程中是否存在問題,提高自己的處理問題的能力。另一方面可以給客戶乙個記錄,保留當時的資訊。但是問題出現了,經常在情急之下總是忘記...

C 記錄程式崩潰時的dumpfile

新上線的軟體在外場偶爾會出現異常崩潰的情況。由於試用範圍比較分散,很難一一前往現場定位問題。而傳統的log日誌方法,在崩潰的情況下,並不能比較準確的表示出問題位置,這使得軟體除錯程序緩慢。後在公司前輩的指點下,我們想到了使用window自帶的dumpfile來記錄崩潰時刻的堆疊資訊,這樣配合log日...

陣列動態規劃,變數自動記錄

在學生體結構中,不需要從鍵盤直接獲得學生人數,而是從鍵盤輸入學生資訊,自動記錄人數 基礎 include using namespace std 函式原型 struct student int maxint student array,int number return location void ...