C++調試(肆):WinDBG分析Dump文件匯總

目錄

????????1.前言

????????2.WinDBG中常用的指令

????????3.分析異常時要關注的信息

????????4.心得


前言

????????本篇博客主要針如何使用WinDBG工具調試Dump文件的流程進行一個講解,具體捕獲的Dump文件也是前兩節例子中生成的Dump文件。


WinDBG中常用的指令

? ? ? ? 關于WinDBG調試時常用的指令主要分為以下幾種:
? ? ? ? 1.
.excr:切換到發生異常的線程上下文中

.excr

? ? ? ? 2.kn:顯示堆棧幀編號和函數地址

kn

圖1.kn指令

? ? ? ? 3.kv:顯示堆棧幀編號,調用閱讀和參數地址

kv

圖2.kv指令

????????4.kp:顯示參數類型和符號化參數值

kp

圖3.kp指令

? ? ? ? 5.lm:查看可執行文件信息,如可執行文件時間戳,動態鏈接庫等信息

lm    #輸出可執行文件信息
lm vm openCV*    #輸出指定文件的信息

? ? ? ? 6.reload /f:用于強制加載pdb文件。比如當我們導入pdb文件時,使用lm指令發現路徑還是沒有找到,則可以使用該指令

reload /f

? ? ? ? 7..dump:用于WinDBG捕獲到進程異常的時候,指定生成dump文件

.dump /m E:\dmpFile\Wild_Pointer.dmp      #生成?小型轉存儲文件
.dump /ma E:\dmpFile\Wild_Pointer.dmp     #生成完全轉存儲文件

? ? ? ? 8..cls:清空WinDBG輸出的信息

.cls

? ? ? ? 9.u:輸出指定棧幀的匯編代碼

u ntdll!RtlUserThreadStart+0x2c

圖4.u指令

????????10.r:查看當前線程所有寄存器的值

r

圖5.r指令

????????11.!analyze -v:自動分析崩潰原因

!analyze -v

分析異常時要關注的信息

? ? ? ? 一些還沒有使用過WinDBG分析dump文件的同學可能對一個整體流程有點懵,本小節針對這種情況給了一個作者自己分析的流程,具體如下:
? ? ? ? 1.導入dump文件后,先根據WinDBG的輸出信息分析發送異常的類型

? ? ? ? 2.然后使用kn(kp或者kv都可以)指令分析異常崩潰時的堆棧信息

????????3.根據異常堆棧信息判斷是否存在沒有引用的dll或者pdb文件路徑

????????4.使用lm指令查看沒有引用的模塊的時間戳

? ? ? ? 5.在WinDBG中導入pdb文件和dll文件路徑,并且使用.reload /f強制刷新路徑,保證WinDBG更新路徑信息

? ? ? ? 6.重新使用kn指令查看堆棧信息,如果支持文件跳轉則直接跳轉分析。如果不支持文件跳轉,后續再次發送異常崩潰可以生成完全轉存儲文件,保證捕獲更多信息

? ? ? ? 7.使用u指令指定反匯編棧幀,根據具體的kn輸出的堆棧信息和反匯編的棧幀分析寄存器和匯編代碼


心得

? ? ? ? 在作者本人的使用過程中,也總結了一些比較重要的心得。

? ? ? ? 1.在其他電腦中崩潰后產生的dump文件分析一直鏈接不到符號表路徑,lm輸出的模塊路徑和時間戳和開發電腦的信息不一致,此時可以使用WinDBG綁定進程的方式動態的去生成dmp文件,并且生成的要是完全轉存儲文件

? ? ? ? 2.必要的時候使用u指令反匯編分析棧幀,這樣能在分析異常的時候提供更多信息,尤其是調用的第三方庫


PS:以上就是這個系列的最后一小節,更多的是要去使用WinDBG搭配dump文件分析,由于作者個人在使用過程中更多涉及到隱私,具體的例子無法更好的體現,讀者可以自己多試試,以此形成一個整體的框架,也歡迎各位大牛對該系列的文章進行勘誤!!!萬分感謝!!!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/82809.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/82809.shtml
英文地址,請注明出處:http://en.pswp.cn/web/82809.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

SOC-ESP32S3部分:33-聲學前端模型ESP-SR

飛書文檔https://x509p6c8to.feishu.cn/wiki/YnbmwtqI5iBwE3kHA7AcZ3yTnLf ESP-SR 是樂鑫官方開發的一個音頻組件,支持以下模塊: 聲學前端算法 AFE喚醒詞檢測 WakeNet命令詞識別 MultiNet語音合成(目前只支持中文) 組件地址&am…

基于vscode,idea,java,html,css,vue,echart,maven,springboot,mysql數據庫,在線考試系統

詳細視頻:【基于vscode,idea,java,html,css,vue,echart,maven,springboot,mysql數據庫,在線考試系統-嗶哩嗶哩】 https://b23.tv/7hwmwmQ

【Linux】shell中的運行流程控制

目錄 一.什么是運行流程控制 二.條件允許流程控制--if 2.1.單分支 2.2.雙分支 2.3.多分支 if多分支練習 三.循環運行流程控制 無判定循環--for 判斷循環--while,until 四.選擇運行流程控制 五.自動應答--expect 5.1.固定位置的交互應答 5.2.非固定位置的…

新能源汽車熱管理核心技術解析:冬季續航提升40%的行業方案

新能源汽車熱管理核心技術解析:冬季續航提升40%的行業方案 摘要:突破續航焦慮的關鍵在熱能循環! 👉 本文耗時72小時梳理行業前沿方案,含特斯拉/比亞迪等8家車企熱管理系統原理圖 一、熱管理為何成新能源車決勝關鍵&am…

OCR MLLM Evaluation

為什么需要評測體系?——背景與矛盾 ?? 能干的事:?? 看清楚發票、身份證上的字(準確率>90%),速度飛快(眨眼間完成)。??干不了的事:?? 碰到復雜表格(合并單元…

深入解析JVM工作原理:從字節碼到機器指令的全過程

一、JVM概述 Java虛擬機(JVM)是Java平臺的核心組件,它實現了Java"一次編寫,到處運行"的理念。JVM是一個抽象的計算機器,它有自己的指令集和運行時內存管理機制。 JVM的主要職責: 加載:讀取.class文件并驗…

Python繪圖庫及圖像類型之特殊領域可視化

Python繪圖庫及圖像類型之基礎圖表-CSDN博客https://blog.csdn.net/weixin_64066303/article/details/148433762?spm1001.2014.3001.5501 Python繪圖庫及圖像類型之高級可視化-CSDN博客https://blog.csdn.net/weixin_64066303/article/details/148450750?spm1001.2014.3001.…

04 APP 自動化- Appium toast 元素定位列表滑動

文章目錄 一、toast 元素的定位二、滑屏操作 一、toast 元素的定位 toast 元素就是簡易的消息提示框,toast 顯示窗口顯示的時間有限,一般3秒左右 # -*- codingutf-8 -*- from time import sleep from appium import webdriver from appium.options.an…

C/C++ OpenCV 矩陣運算

C/C OpenCV 矩陣運算詳解 💡 OpenCV 是一個強大的開源計算機視覺和機器學習庫,它提供了豐富的矩陣運算功能,這對于圖像處理和計算機視覺算法至關重要。本文將詳細介紹如何使用 C/C 和 OpenCV 進行常見的矩陣運算。 矩陣的創建與初始化 在進…

基于大模型的 UI 自動化系統

基于大模型的 UI 自動化系統 下面是一個完整的 Python 系統,利用大模型實現智能 UI 自動化,結合計算機視覺和自然語言處理技術,實現"看屏操作"的能力。 系統架構設計 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…

USB擴展器與USB服務器的2個主要區別

在現代辦公和IT環境中,連接和管理USB設備是常見需求。USB擴展器(常稱USB集線器)與USB服務器(如朝天椒USB服務器)是兩類功能定位截然不同的解決方案。前者主要解決物理接口數量不足的“近身”連接擴展問題,而…

Nuxt.js 中的路由配置詳解

Nuxt.js 通過其內置的路由系統簡化了應用的路由配置,使得開發者可以輕松地管理頁面導航和 URL 結構。路由配置主要涉及頁面組件的組織、動態路由的設置以及路由元信息的配置。 自動路由生成 Nuxt.js 會根據 pages 目錄下的文件結構自動生成路由配置。每個文件都會對…

驗證負載均衡與彈性伸縮

什么是彈性伸縮(Auto Scaling)? 彈性伸縮是指 云計算平臺根據實時負載自動調整計算資源(如服務器實例、容器Pod)數量,以確保系統在高峰時保持穩定,在低谷時節省成本。 什么時候會觸發彈性伸縮&…

區分viewmodel和model職責的方法

gpt回答挺好的,我就分享一下。 1. 最經典的一句話區分 Model(Repository/數據層):只負責**“數據獲取/存儲/持久化”和“核心業務算法”**,不依賴UI層和Android框架,可以脫離界面獨立存在。 ViewModel&…

C語言數據結構筆記3:Union聯合體+結構體取8位Bool量

本文銜接上文要求,新增8位bool量的獲取方式。 目錄 問題提出: Union聯合體struct結構體(方式1): Union聯合體struct結構體(方式2): BYTE方式讀取: 問題提出: 在STM32單片機的編程中,無法定義Boo…

三種讀寫傳統xls格式文件開源庫libxls、xlslib、BasicExcel的比較

最近準備讀寫傳統xls格式文件,而不是較新的xlsx,詢問DeepSeek有哪些開源庫,他給出了如下的簡介和建議,還給出了相應鏈接,不過有的鏈接已失效。最后還不忘提醒,現在該用xlsx格式了。 以下是幾個可以處理傳統…

從測試角度看待CI/CD,敏捷開發

什么是敏捷開發? 是在高強度反饋的情況下,短周期,不斷的迭代產品,滿足用戶需求,搶占更多的市場 敏捷開發是什么? 是一種產品快速迭代的情況下,降低出錯的概率,具體會落實到公司的…

figma MCP + cursor如何將設計稿生成前端頁面

一、準備工作 figma MCP需要通過figma key來獲取設計稿權限,key的生成步驟如下 1. 打開figma網頁版/APP,進入賬戶設定 2. 點擊生成token 3. 填寫內容生成token(一定要確認復制了,不然關閉彈窗后就不會顯示了) 二、配置MCP 4. 進入到cursor…

git互聯GitHub 使用教程

一、下載git Git 公司 右鍵 git config --global user.name "name" git config --global user.email "email" ssh-keygen -t rsa -C email :生成的ssh密鑰需要到github 網站中保存ssh 二、GitHub新建repository 三、本地git互聯GitHub 找…

“輕量應用服務器” vs. “云服務器CVM”:小白入門騰訊云,哪款“云機”更適合你?(場景、配置、價格對比解析)

更多云服務器知識,盡在hostol.com 當你第一次踏入騰訊云這個“數字百貨大樓”,面對琳瑯滿目的“云產品”,是不是有點眼花繚亂,特別是看到“輕量應用服務器”和“云服務器CVM”這兩位都號稱能幫你“安家落戶”的“云主機”時&…