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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

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

發布時間:2025/3/8 编程问答 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 WinDbg 命令三部曲:(一)WinDbg 命令手册 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
  • 《WinDbg 命令三部曲:(一)WinDbg 命令手冊》
  • 《WinDbg 命令三部曲:(二)WinDbg SOS 擴展命令手冊》
  • 《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,如需轉載請自行聯系原作者

    總結

    以上是生活随笔為你收集整理的WinDbg 命令三部曲:(一)WinDbg 命令手册的全部內容,希望文章能夠幫你解決所遇到的問題。

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