日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Dump文件

發布時間:2024/8/23 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Dump文件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. Dump文件

1. Dump文件介紹

Dump文件(Dump File),也叫轉儲文件,以.DMP為文件后綴。dump文件是進程在內存中的鏡像文件,通過轉換然后存儲成以.DMP后綴的文件。dump文件根據存儲時的選項不同,會生成不同大小的文件,其中記錄信息也自然有所不同。

2. Dump文件分類

程序分兩種,內核模式程序和用戶模式程序,也即Ring0程序和Ring3程序。Dump文件是伴隨著程序而生成的,所以Dump文件也同樣分兩種。?
1. Kernel-Mode Dump Files(內核模式Dump文件),主要是驅動程序,此文不涉及。?
2. User-Mode Dump Files(用戶模式Dump文件),主要是應用程序及服務程序,此文所講。?
用戶模式Dump文件又分Full User-Mode Dumps和Minidumps。前者生成的是完整的內存快照,所以文件比較大。后者依然生成選項,生成包含不同信息的Dump文件。此文以Minidumps文件來分析調試。

3. Dump文件生成方式

  • 通過WinDbg工具的命令?
    用WinDbg來Attach崩潰提示窗口的process,然后輸入.dump /m C:\myapp.dmp命令,即可生成默認的miniDump文件(只包含系統信息、加載的模塊(DLL)信息、 進程信息和線程信息)。
  • 通過Windows任務管理器,選擇指定進程,右鍵生成轉儲文件(此時的轉儲文件即為Full User-Mode Dumps,包含所有信息,所以文件比較大)。
  • 通過代碼在程序崩潰時生成Dump文件。
  • #include <DbgHelp.h> #pragma comment(lib, "Dbghelp.lib") // 此函數需要包含上面頭文件和引入相應的庫 LONG WINAPI ExceptionFilter(EXCEPTION_POINTERS* _pExcp) { HANDLE hFile = CreateFile( "d:\\Format.dmp", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); if (INVALID_HANDLE_VALUE == hFile) {return EXCEPTION_CONTINUE_EXECUTION;}MINIDUMP_EXCEPTION_INFORMATION einfo = {0};einfo.ThreadId = ::GetCurrentThreadId(); einfo.ExceptionPointers = _pExcp; einfo.ClientPointers = FALSE; MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), hFile, MiniDumpNormal, // 指定生成默認的Minidump文件&einfo, NULL, NULL); CloseHandle(hFile); return EXCEPTION_EXECUTE_HANDLER; }// 下面函數放在當前模塊的入口函數處,指定ExceptionFilter替換原生的異常處理 // 即當原本要彈出崩潰提示窗口前,需要經過此函數處理,可以處理完立即退出,也可以繼續 SetUnhandledExceptionFilter(ExceptionFilter);
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38

    2. 分析Dump文件

    1. 使用Visual Studio

    • 選擇與生成Dump文件相同版本的VS。
    • 啟動VS并打開Dump文件。
    • 必須保證生成Dump文件的程序的PDB文件和源代碼相一致。
    • VS2005打開Dump文件時,直接按F5調試,代碼會停在出錯的地方,通過Call Stack窗口查看。
    • VS2010打開Dump文件時,?
      ?
      需要通過Set symbol paths設置符號文件路徑,也即PDB文件路徑。然后點擊Debug with Native Only,代碼即會暫時在出錯的地方,通過Call Stack窗口查看相關信息。

    2. 使用WinDbg

    • 選擇相應版本的WinDbg,x86還是AMD64(也即X64,因為64桌面架構系統是AMD最新發布)。
    • File->Open Crush Dump,打開指定的Dump文件。
    • File->Symbol File Path,添加srv*D:\Symbols*http://msdl.microsoft.com/download/symbols
    • File->Symbol File Path,添加程序的PDB文件夾路徑。這樣可以調試系統DLL,也可以調試自有程序。
    • 然后在WinDbg命令行中輸入!analyze -v,等待WinDbg分析完畢。
    • 通過上圖,即可以看到代碼崩潰的行數。

    3. 自定義崩潰窗口

  • 通常Windows會提供一個默認的崩潰提示窗口,或者是程序直接閃退。?
  • 重寫ExceptionFilter函數,即可以重新定義崩潰窗口,用以提示用戶發送相關信息給軟件提供商。?
  • 示例代碼?
    示例代碼是Win32類型的DLL,導出接口SetCustomUnhandledExceptionFilter在Solution的啟動Project的最開始調用一次即可。?
  • 總結

    以上是生活随笔為你收集整理的Dump文件的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。