WinDbg 命令三部曲:(一)WinDbg 命令手冊

  1. 《WinDbg 命令三部曲:(一)WinDbg 命令手冊》
  2. 《WinDbg 命令三部曲:(二)WinDbg SOS 擴展命令手冊》
  3. 《WinDbg 命令三部曲:(三)WinDbg SOSEX 擴展命令手冊》

導航目錄

  • 內置幫助命令
  • 調試會話命令
  • 一般信息命令
  • 符號加載命令
  • 模塊加載命令
  • 異常分析命令
  • 進程信息命令
  • 線程信息命令
  • 堆棧信息命令
  • 擴展幫助命令
  • 日志擴展命令

調試準備

為了測試 WinDbg 中使用 SOS 擴展命令,我創建了應用程序 "MemoryLeakApp.exe",Visual Studio?程序選擇為 64 位環境編譯。

?"MemoryLeakApp.exe"?啟動運行后可能占用內存600M。

此時,選擇使用 64 位 WinDbg 來調試程序。我們先通過 Attach Process 方式來調試。

當然,如果我們使用了 32 位的 WinDbg 去 Attach 進程,會直接報錯。

?

WinDbg 常用命令手冊

內置幫助命令
命令描述
?

?   ? ? ? ? ? 顯示常規命令

? /D ? ? ? ? ? ?通過 DML(Debugging Markup Language) 方式顯示常規命令

.help

.help ? ?   ?顯示 . 系列命令

.help /D ? ? ??通過 DML 方式顯示 . 系列命令

.help /D a* ??通過 DML 方式顯示所有以 'a' 字母開頭的 . 系列命令

.chain

.chain ? ? ? ? ?列出所有已加載的調試器擴展

.chain /D ? ? ?通過 DML 方式列出所有已加載的調試器擴展

.extmatch

.extmatch /e ExtDLL FunctionFilter ? ? ?顯示調試器擴展的所有導出函數

.extmatch /D /e ExtDLL FunctionFilter ?通過 DML 方式顯示調試器擴展所有導出函數

.extmatch /D /e uext * ? ? ? ? ? ? ? ? ? ? ? 顯示 uext 擴展中的所有導出函數

.hh

.hh ? ? ? ? 打開 WinDbg 的幫助文件

.hh Text ?打開 WinDbg 的幫助文件,并自動搜索 Text 的內容

.hh dt ? ? 在 WinDbg 幫助文件中搜索 dt 命令

調試會話命令
命令描述
.attach

.attach PID 附加到指定ID的進程

.detach

.detach ? ? ?結束調試會話,被調試進程仍可繼續運行

q

q ? ? ? ? ? ? ? 結束調試會話,同時終止被調試進程的進行

qq ? ? ? ? ? ??結束調試會話,同時終止被調試進程的進行

.restart

.restart ? ? ?重啟被調試應用

一般信息命令
命令描述
version

顯示調試器版本信息和已加載的調試器擴展

vercommand

顯示調試器啟動文件的路徑

vertarget

顯示目標機器的版本

CTRL+ALT+V

打開或關閉 Verbose 模式開關,某些命令在此模式下可以給出更多詳細信息

.formats

.formats Expression ?顯示數字的各種格式信息

.formats 5

.cls

清理屏幕

.last event顯示最新的異常信息或事件信息
.effmach

.effmach 顯示有效作用的機器信息
.effmach .?
.effmach #?
.effmach x86 | amd64 | ia64 | ebc

.time

顯示系統記錄的各種時間

.echo

.echo String ?輸出字符串

.echo "String"

.echo "Hello World"

符號加載命令
命令描述
ld

ld ModuleName ?加載指定模塊的符號

ld * ? ? ? ? ? ? ? ? ?加載所有模塊的符號

!sym

!sym ? ? ? ? ? ? ? ?獲取符號加載狀態

!sym noisy ? ? ? 讓調試器顯示符號搜索詳細信息

!sym quiet ? ? ? ?默認項,不顯示符號搜索信息

.sympath

.sympath ? ? ? ? 顯示和設置符號搜索路徑

.sympath+ ? ? ? 增加符號搜索路徑

.sympath+ C:\Symbols

.symopt

.symopt ? ? ? ? ? ?顯示當前符號可選項

.symopt+ Flags ?添加符號可選項

.symopt- Flags ? 移除符號可選項

.symfix

.symfix ? ? ? ? ? ? ? ? ? ? ? ? ? 設置符號庫路徑

.sym+ DownstreamStore ?添加符號庫路徑

x

x [Options] Module!Symbol ? ?模式匹配符號信息

x /t .. ? ? ? ? ? ?根據數據類型匹配

x /v .. ? ? ? ? ? ?顯示詳細信息

x /a .. ? ? ? ? ? ?按照地址排序

x /n .. ? ? ? ? ? ?按照名稱排序

x /z .. ? ? ? ? ? ?按照大小排序

x *! ? ? ? ? ? ? ? 列出所有模塊

x ntdll!* ? ? ? ? ?列出 ntdll 模塊

x /t /v ntdll!* ? ?列出 ntdll 模塊數據類型和符號類型

.reload

.reload ? ? ? ? ? ? ? ? ? ? ? ? ? ?重新加載符號信息

.reload [/f | /v] ? ? ? ? ? ? ? ?/f 強制立即加載符號 /v 顯示詳細信息

.reload [/f | /v]?Module?? ? Module 為指定模塊加載符號信息

.reload /f @"ntdll.dll"

.reload /f @"C:\WINNT\System32\verifier.dll"

模塊加載命令
命令描述
?lm

lm[ v | l | k | u | f ] [m Pattern] 顯示已加載的模塊

lm ? 顯示所有加載和未加載的模塊信息

lmv 顯示已加載模塊的詳細信息

lml ?同時顯示加載的符號信息

lmk 顯示內核模塊信息

lmu 顯示用戶模塊信息

lmf ?顯示鏡像路徑

lmm 匹配模塊名稱

lmD 使用 DML 方式顯示

lmv m kernel32 顯示 kernel32 模塊詳細信息

!dlls

!dlls ? ? ? ? 列出所有加載的模塊和加載數量

!dlls -i ? ? ?根據初始化順序

!dlls -l ? ? ?根據加載順序(默認項)

!dlls -m ? ?根據內存順序

!dlls -v ? ? 顯示更多詳細信息

!dlls -c?ModuleAddr ?僅顯示 ModuleAddr 地址的模塊信息

!dlls -? ? ? 顯示幫助

!dlls -v -c kernel32 顯示 kernel32.dll 的信息

!lmi

!lmi?Module ? ?顯示模塊的詳細信息,包括加載符號信息

!lmi kernel32 ?顯示 kernel32.dll 模塊的信息

異常分析命令
命令描述
!analyze

!analyze -v ? ? ? 顯示當前異常的詳細信息

!analyze -hang ?診斷線程調用棧上是否有任何線程阻塞了其他線程

!analyze -f ? ? ? ?查看異常分析信息,盡管調試器并未診斷出異常

進程信息命令
命令描述
!dml_proc

通過 DML 方式顯示當前進程的信息

.tlist

顯示當前所有進程

線程信息命令
命令描述
~

~ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?顯示線程信息

~* [Command] ? ? ? ? ? 所有線程

~. [Command] ? ? ? ? ? ?當前線程

~# [Command] ? ? ? ? ? 引發當前事件或異常的線程

~Number [Command] ?顯示指定序號的線程

~~[TID] [Command] ? 顯示指定線程ID的線程

~Ns ? ? ? ? ? ? ? ? ? ? ? ? ?切換到線程 N

~* k ?顯示所有線程的調用棧

~2 f ? 凍結2號線程

~# f ?凍結引發異常的線程

~3 u ?解除對3號線程的凍結

~2 k ?顯示2號線程的調用棧

~e

~* e CommandString ? ? ? ? ? ?在所有線程上執行命令

~. e CommandString ? ? ? ? ? ? 在當前線程上執行命令

~# e CommandString ? ? ? ? ? ?在引發異常的線程上執行命令

~Number e CommandString ? 在指定序號的線程上執行命令

~2e r; k; kd ?相當于 ~2r; ~2k; ~2kd

~*e !gle ? ? ? 顯示所有線程的最后一個錯誤信息

~f

~Thread f ? ?凍結線程

~u

~Thread u ? 解除凍結線程

~n

~Thread n ? 掛起線程,增加線程掛起數量

~m

~Thread m ?恢復線程,減少線程掛起數量

!teb

顯示線程環境信息

!tls?

!tls -1 ? ? ? ? ?-1 為顯示當前線程所有的 slot 信息

!tls SlotIdx ? 顯示指定的 slot 信息

!tls [-1 | SlotIdx] TebAddr

.ttime

顯示線程時間信息

!runaway

[Flags: 0 | 1 | 2] 顯示每個線程消耗的時間,用于快速的查找 CPU 時間消耗最多的線程

0 用戶態時間

1 內核態時間

2 自線程創建起的時間間隔

!gle

!gle ? ? ? ? 顯示當前線程的最后錯誤

!gle -all ? ?顯示所有線程的最后錯誤

!error

!error ErrValue ? ? ?解析錯誤信息

!error ErrValue 1 ? 將錯誤值作為 NTSTATUS 代碼

堆棧信息命令
命令描述
k

k [n] [f] [L] [#Frames] ?顯示調用棧信息

kn ? ? ?調用棧包含幀號

kf ? ? ? 臨近幀的距離

kL ? ? ? 忽略源代碼

kb ... ?最開始的 3 參數

kp ... ?所有的參數,包括參數類型、名稱和值

kP ... ?所有的參數

kv ... ?FPO信息

kb 5 ? 顯示最開始的 5 個幀

kd

kd [WordCnt] ?顯示原始棧數據和可能的符號信息

kM

使用 DML 格式顯示堆棧信息

.kframes

設置棧長度,默認是20(0x14)

.frame

.frame ? ? ? ? ? ?顯示當前幀

.frame # ? ? ? ? 指定幀號

.frame /r [#] ? 顯示寄存器信息

.frame 2 ? ? ? ? 顯示幀號 2 的信息

.frame /r 0d ? ?顯示 0 幀中寄存器信息

!uniqstack

!uniqstack?? ? ? ? ? ? ? ? ? 顯示所有線程的棧信息

!uniqstack [b|v|p] [n] ? b=前3個參數;v=FPO信息;p=所有參數;n=幀號

!uniqstack -? ? ? ? ? ? ? ? 顯示幫助

!findstack

!findstack Symbol ? ? ? ? ? ? ?找到包含符號或模塊的棧

!findstack Symbol [0|1|2] ? 0=僅顯示線程ID;1=線程ID和幀;2=全部的線程棧;

!findstack -? ? ? ? ? ? ? ? ? ? ? ?顯示幫助

!findstack clr 2 ? ? ? ? ? ? ? ? ? 顯示包含 clr 的所有棧的信息

擴展幫助命令
命令描述

!Ext.help

常規擴展命令幫助

!Exts.help

?

!Uext.help

用戶態模式擴展命令幫助

!Ntsdexts.help

用戶態擴展命令幫助(OS相關)

!logexts.help

日志相關擴展

!clr10\sos.help

調試托管代碼

!wow64exts.help

wow64調試器擴展

!Wdfkd.help

內核態驅動框架擴展

!Gdikdx.help

圖形驅動擴展

!NAME.help

顯示任何 NAME 名稱的擴展命令的幫助
日志擴展命令
命令描述

!logexts.help

?顯示所有日志擴展命令

!loge

!loge [dir] ?打開日志功能,可選配置輸出目錄

!logi

初始化日志功能

!logd

關閉日志功能

!logo

!logo ? ? ? ? ? ? ? ? ? ?列出日志配置信息

!logo [e|d] [d|t|v] ?打開或關閉日志,d=調試器,t=文本文件,v=詳細信息

!logc

!logc ? ? ? ? ? ? ? ? ? ? ? ?列出所有日志類型

!logc p # ? ? ? ? ? ? ? ? ?列出 # 中的日志類型

!logc [e|d] * ? ? ? ? ? ? ?打開或關閉所有日志類型

!logc [e|d] # [#] [#] ?打開或關閉日志類型 #

!logb

!logb p ?打印緩沖區信息至調試器

!logb f ? 刷新緩沖區內容之日志文件

!logm

!logm ? ? ? ? ? ? ? ? ? ? ? ? ?顯示模塊的包含或屏蔽列表

!logm [i|x] [DLL] [DLL] ?指定模塊的包含或屏蔽列表

參考資料

  • Common WinDbg Commands
  • WinDbg cheat sheet
  • Debugger Commands
  • Command Tokens
  • Meta-Commands
  • Command-Line Options
  • 那些年黑了你的微軟BUG
  • WinDbg - Kernel-Mode Extension Commands
  • WinDbg - General Extension Commands
  • WinDbg - Meta-Commands
  • WinDbg - Commands
  • WinDbg - Command Tokens
  • Debugger Commands from MSDN





本文轉自匠心十年博客園博客,原文鏈接:http://www.cnblogs.com/gaochundong/p/windbg_cheat_sheet.html,如需轉載請自行聯系原作者

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

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

相關文章

華為手機的分類有何區別_“鴻蒙”系統能不能玩安卓游戲?如果能,它跟安卓系統有何區別?...

“鴻蒙”系統能不能玩安卓游戲?如果能,它跟安卓系統有何區別?筆者其實挺好奇一件事情,按理來說,華為即將推出“鴻蒙”系統,作為一款真正的國產系統,筆者肯定是要支持的,畢竟我自己使…

MyEclipse2014破解

MyEclipse下載地址: http://www.xp85.com/html/MyEclipse2014.html 破解教程http://jingyan.baidu.com/article/7082dc1c57eb19e40a89bdcd.html

計算機模擬蛋白,酶的計算機模擬和蛋白質組分析

報告題目:Computer Simulation of Enzymes and Analysis of Proteomes/Protein Sets(酶的計算機模擬和蛋白質組分析)主講人:郭鴻主講人簡介:Professor, Department of Biochemistry & Cellular and Molecular Biology, University of Ten…

分塊編碼(Transfer-Encoding: chunked)VS Content-length

參考鏈接: HTTP 協議中的 Transfer-Encoding 分塊傳輸編碼 https://www.cnblogs.com/xuehaoyue/p/6639029.html 一、背景: 持續連接的問題:對于非持續連接,瀏覽器可以通過連接是否關閉來界定請求或響應實體的邊界;而…

200t不穩定_技術革新!將不可能變為可能 這家企業是怎么做到的?

據水泥人網了解,每年的第四季度是整個水泥行業的高峰期,尤其是北方地區各大水泥集團都將會進入錯峰停產和檢修期,燒成技術改造往往是水泥企業技改過程最為重要的環節,如何做好燒成技術改造成為水泥企業必須要面對的問題。針對目前…

關于update set from where

關于update set from where 下面是這樣一個例子: 兩個表a、b,想使b中的memo字段值等于a表中對應id的name值 表a:id,name 1 王 2 李 3 張 表b&#x…

取消計算機觸摸板,筆記本電腦觸摸板如何打開和關閉

筆記本電腦觸摸板怎么打開和關閉?現在用筆記本的用戶都越來越多了,現在也有人把筆記本當電視使了。就是電視上看得到用筆記本聯網也是能看到,電視看不到的筆記本電腦也能看到。但是筆記本上面有一個觸摸板,現相信大家都用過。可是…

List數據多重規則排序

List集合進行排序時,很多人會考慮 冒泡、快速等排序算法,但是對于多重排序規則的話,算法就不太適用了。其實java.util.Collections已經提供了 sort的排序方法,并且能自己實現其排序規則。現在有個場景:我需要對一批優惠…

QQ顯示服務器繁忙2013,在QQ空間發表日志的之后為什么樣總是顯示“服務器繁忙”?...

據小米方面介紹,小米手機認證空間帳號自2013年5月21日開通以來,框架,8mm加厚鋼化玻璃,15mm防火板材質機殼3、在QQ空間發表日志的之后為什么總是顯示“服務器繁忙”,發表不了日志?這個難題在我家電腦下終于存…

http sxyk.cdn_Discuz x3 開啟cdn和https后鏈接修改教程

Discuz x3 開啟cdn和https后鏈接修改教程開啟支持https主要需要修改一下幾個地方1. 、查找修改文件discuz_application.PHP :source/class/discuz/discuz_application.php (約第 187 行處): 查找:$_G[isHTTPS] ($_SERVER[HTTPS] && …

8.4. su - root

add a user to wheel group rootfreebsd:~ # pw usermod neo -G wheel rootfreebsd:~ # id neo uid1001(neo) gid1001(neo) groups1001(neo),0(wheel)freebsd# grep wheel /etc/group wheel:*:0:root,neo原文出處:Netkiller 系列 手札 本文作者:陳景峯 轉…

oracle更改編碼

背景:win764bit英文操作系統(支持中文)   oracle11G默認安裝   從ZHS16GBK字符集導入數據庫表現:plsql顯示為亂碼解決:1、查看并更改數據庫的編碼為ZHS16GBK $sqlplus system/oracleSQL> select * from v$nls…

she is so css什么意思,輸入she is so什么意思 微信she is so什么梗

最近很多人都在微信玩she is so的小游戲,會出現很多不同的形容詞很有趣,適合好友之間一起玩。而不少人也不明白輸入she is so是什么意思?該怎么玩呢?下文具體介紹。微信輸入she is so是什么意思在微信聊天對話框中輸入she /he is …

transformer論文解讀_【論文解讀】ICLR2020 | 深度自適應Transformer

作者 | kaiyuan 整理 | NewBeeNLP一篇來自ICLR2020,facebook人工智能實驗室的論文,關于改進Transformer推理速度的。論文地址:https://arxiv.org/abs/1910.10073寫在前面大模型在困難任務上表現非常好,而小模型也可以在比較簡單…

vs2017下開發C++MFC動態庫實現

2019獨角獸企業重金招聘Python工程師標準>>> 今天無意間瀏覽了一些關于vs2017新功能的介紹,特別是微軟發部了Visual Studio Installer,這個集成安裝工具簡約的操作風格,豐富vs開發內容,真正打通了開發的“最后一公里”…

hadoop為什么出現

在很多領域里面,在現在這個時代下面,很多公司產生的數據太多了,數據量太大了。用原來的技術去做,有種捉襟見肘的感覺,要么在性能上面,要么在速度上面遇到了瓶頸,這個時候需要新的技術來解決&…

微信視頻開發jquery mobile

功能 微信企業號里開發一個微視頻功能,用于播放視頻。技術 J2EE,前端ui是jquerymobile,HTML5,CSS3,開源視頻插件:mediaelement-and-player.min.js 插件官網:http://www.mediaelementjs.com/視…

python加密程序_Python 簡單的可逆加密程序

簡單加密1.[代碼][Python]代碼#codingutf-8Description: 可逆的加密與解密Environment: python2.5.xAuthor:idehonggmail.comimport osimport sysclass Code(object):可逆的加密與解密def __init__(self, key "idehonggmail.com"):self.__src_key keyself.__key s…

eclipse中tomcat服務器locations不能修改,解決eclipse中Tomcat服務器的server location選項不能修改的問題...

解決eclipse中Tomcat服務器的server location選項不能修改的問題問題描述編輯tomcat服務器時,server locations無法編輯,如下圖:解決方法在Eclipse菜單欄中選擇window — show view — server 可以看到服務的面板,服務面板中可看到…

當create table as select 遇上大數據

統計24小時的紅包感知專題,有1.5億行以上的數據,Nokia給出的方法是先按小時執行算法,再匯總各個小時的執行結果。 算法中包含了大量的 sum(case when)計算。 專題里有5個小節,執行計劃的時候,需要跑5次where條件不同…