qt處理程式異常崩潰
程式難免會有異常崩潰的時候,重要的是在崩潰時能及時把重要的資料儲存好,將損失減少。
儲存資料僅是拯救措施,更重要的是找到錯誤的根源。若能在崩潰的同一時候,程式自己主動記錄下崩潰時的執行資訊,將有助於修正工作。微軟提供了“DbgHelp”錯誤除錯技術。呼叫相關功能就可以儲存程式崩潰時的資訊,然後藉助WinDbg軟體就能分析出當時的執行狀況。呼叫“DbgHelp”的MiniDumpWriteDump函式儲存以“.dmp”為字尾的Dump檔案,該檔案能被WinDbg讀取並分析。
在標頭檔案裡包括“#include <Windows.h>”。
加入標頭檔案“#include <DbgHelp.h>”,在Pro檔案里加入“LIBS += -lDbgHelp”。目的是連結DbgHelp庫。
LONG ApplicationCrashHandler(EXCEPTION_POINTERS *pException){//程式異常捕獲 /* ***儲存資料程式碼*** */ //建立 Dump 檔案 HANDLE hDumpFile = CreateFile(QTime::currentTime().toString("HH時mm分ss秒zzz.dmp").utf16(), GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); if( hDumpFile != INVALID_HANDLE_VALUE){ //Dump資訊 MINIDUMP_EXCEPTION_INFORMATION dumpInfo; dumpInfo.ExceptionPointers = pException; dumpInfo.ThreadId = GetCurrentThreadId(); dumpInfo.ClientPointers = TRUE; //寫入Dump檔案內容 MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), hDumpFile, MiniDumpNormal, &dumpInfo, NULL, NULL); } //這裡彈出一個錯誤對話方塊並退出程式 EXCEPTION_RECORD* record = pException->ExceptionRecord; QString errCode(QString::number(record->ExceptionCode,16)),errAdr(QString::number((uint)record->ExceptionAddress,16)),errMod; QMessageBox::critical(NULL,"程式崩潰","<FONT size=4><div><b>對於發生的錯誤,表示誠摯的歉意</b><br/></div>"+ QString("<div>錯誤程式碼:%1</div><div>錯誤地址:%2</div></FONT>").arg(errCode).arg(errAdr), QMessageBox::Ok); return EXCEPTION_EXECUTE_HANDLER; }
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
SetUnhandledExceptionFilter((LPTOP_LEVEL_EXCEPTION_FILTER)ApplicationCrashHandler);//註冊異常捕獲函式
MainWindow w;
w.show();
return a.exec();
}
當被錯誤困擾得焦頭爛額的時候。若是老天能直接告訴錯誤在哪一行程式碼該有多好呀。其實WinDbg就能做到。
在專案的proproject檔案裡增加:QMAKE_LFLAGS_RELEASE = /INCREMENTAL:NO /DEBUG
這句話的目的是Release版也將生成“.pdb”字尾的除錯資訊檔案。在使用WinDbg匯入Dump前。指定好原始碼與pdb檔案的位置。就可以在錯誤報告內看到罪魁禍首是哪一行程式碼。
相關推薦
qt處理程式異常崩潰
程式難免會有異常崩潰的時候,重要的是在崩潰時能及時把重要的資料儲存好,將損失減少。 儲存資料僅是拯救措施,更重要的是找到錯誤的根源。若能在崩潰的同一時候,程式自己主動記錄下崩潰時的執行資訊,將有助於修正工作。微軟提供了“DbgHelp”錯誤除錯技術。呼叫相關功能就可以儲
Qt程式異常崩潰處理技巧(Win)
文章轉載來自 http://www.cnblogs.com/lcchuguo/p/5177715.html 作者 lcchuguo 首先,程式難免會有異常崩潰的時候。重要的是在崩潰時能及時把重要的資料儲存好,將損失減少。 SetUnhandl
程式異常崩潰後用windbg輔助除錯解決的經驗
狀況:我的程式呼叫別人的庫做 檔案寫入工作。 在這一過程中出現異常,程式崩潰。 經反覆檢查,認為自己的程式沒有錯,但無法判斷在別人庫裡哪裡有錯。 &
Python小白處理程式異常,就用異常捕獲!
異常處理在之前的學習中我們一直沒有接觸過。 知道怎麼向程式輸入一段字串呢?那麼我們在這裡提供一個小例子。 學習Python中有不明白推薦加入交流裙 號:73
一種處理vs2017異常崩潰的方法
01 vs2017 對於大工程頻繁崩潰 在除錯chromium程式碼的時候,vs2017有時會頻繁出現崩潰。 優先嚐試: 工具==>選項==>除錯==>常規 [一個程序中斷時則中斷所有程序] 的勾選去掉。 還可以嘗試如下操作: 1 嘗試刪除
Android 對程式異常崩潰的捕捉
由於Android裝置各異,第三方定製的Android系統也非常多,我們不可能對所有的裝置場景都進行測試,因而開發一款完全無bug的應用幾乎是不可能的任務,那麼當應用在使用者的裝置上Force Close時,我們是不是可以捕獲這個錯誤,記錄使用者的裝置資訊,然後讓使用者選擇是否反饋這些堆疊資訊,通過這
程式異常崩潰捕捉-dmp檔案及Windbg分析
#include <dbghelp.h> #include <shellapi.h> #include <shlobj.h> // 自定義的exectpion filter LONG WINAPI
universal-image-loader載入圖片,程式異常崩潰,圖片不在載入顯示問題
主要是發現universal-image-loader 用來在載入圖片的時候,如果程式異常崩潰了,那麼在自動重啟程式的時候,universal-image-loader會出現在快取讀取圖片的問題,解決方式為 new DisplayImageOptions.Builde
python_python中try except處理程式異常的三種常用方法
python中try except處理程式異常的三種常用方法 如果你在寫python程式時遇到異常後想進行如下處理的話,一般用try來處理異常,假設有下面的一段程式: 1 2 3 4 5 6 7 8 try: 語句1 語句2 . .
qt opencv 程式異常結束
正如標題所示:你自己在Qt中配置好後opencv後,測試的時候出現 程式異常結束。。。。 但是你編譯程式碼的時候卻沒有錯,那麼很有可能就是你的動態連結庫沒有載入到系統的環境中去。 解決辦法: 1、
android 應用程式異常崩潰捕捉
import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java
Android 對全域性程式異常崩潰的捕捉
以下為異常捕捉處理程式碼: import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.F
python中try except處理程式異常的三種常用方法
轉載自:http://www.pythontab.com/html/2013/pythonjichu_0204/210.html 如果你在寫python程式時遇到異常後想進行如下處理的話,一般用try來處理異常,假設有下面的一段程式: 1 2 3 4 5 6 7 8 try:
Qt程式出現(ig9icd64.dll) (XXXXX.exe 中)處有未經處理的異常: 0xC000041D: 使用者回撥期間遇到未經處理的異常。。
我也是被自己逼瘋了,中午還在一邊執行程式,一邊寫部落格。休息了一會,再執行程式,發現好好地程式居然跑不起來(估計也是去休息了),居然出現這個bug。 於是下午進行了各種除錯,註釋程式碼,最終確定了問題在QOpenGLWidget裡面。但是這個我也動不了,於是再次找原因,找啊找,找了一下
Qt中關於release版本程式異常結束問題
BaoBao and DreamGrid are playing a game using a strange button. This button is attached to an LED light (the light is initially off), a co
Java——使用try...catch與throws處理程式執行的異常
1.異常:異常就是Java程式正在執行過程中出現的錯誤 2. 兩種處理異常的方式:try catch,throws 3.Throwable子類有Error,Exception; Exception子類有RuntimeException(執行時異常)
程式異常VC偵錯程式無法定位的處理
最近除錯程式發現空指標老無法定位, 使用一個最簡單的main函式做空指標檢查也一樣, 具體症狀見圖 pdb載入是正常的, 但是堆疊沒顯示如此簡單的空指標訪問位置. Google了以下 解決方法: Debug->Exception中將所有異常勾選即可 不知道哪裡的設定導致如此詭異的問題, 害
Android崩潰處理及異常收集
目前為止也經歷了好幾個專案了,每個專案都會避免不了crash。這裡就總結一下專案的異常處理。下面介紹一下系統提供的異常處理方法。 1.系統異常處理類。 /** * Interface for handlers invoked when a <tt>T
Qt程式異常結束
解決Qt程式異常結束 Qt程式異常結束如下圖所示: 出現這種情況一般是庫檔案載入的問題,因為程式編譯通過並且沒有報錯,然而程式卻沒有執行起來,這個時候的錯誤應該屬於連結庫檔案錯誤。 連結時出錯 解決辦法: 1、如果有動態庫,需要將動態庫複製到exe(執行檔案)的同一級目錄下;
自定義VS程式異常處理及除錯Dump檔案(一)
1. Dump檔案 1. Dump檔案介紹 Dump檔案(Dump File),也叫轉儲檔案,以.DMP為檔案字尾。dump檔案是程序在記憶體中的映象檔案,通過轉換然後儲存成以.DMP字尾的檔案。dump檔案根據儲存時的選項不同,會生成不同大小的檔案,其