導航:首頁 > 程序命令 > windbg命令

windbg命令

發布時間:2022-01-15 18:34:35

⑴ windbg 怎麼使用sos命令

首先, 可以選擇從命令行中啟動WinDBG. 舉例, 使用下面的帶有-logo參數的命令: windbg.exe -logo c:\logfile.txt 其次, 如果你已經在一個debug session里了, 你可以使用.logopen命令來開始記錄. 第一步, 開啟日誌記錄: .logopen d:\output.txt 第二步, 運行你想要輸出到文本文件中的命令:!address 第三步, 關閉日誌記錄: .logclose 第四步, 檢查是否還有日誌記錄打開: 比方說你抓了個full mp, 在debug一個很復雜的問題, 可能你已經有了結果, 或者還在研究當中, 這時你被別的事情打攪了, 回家了, 第二天來重開mp文件, 不記得昨天做到哪裡了. 在或者說, 你的同事很牛, 他分析了mp文件並得出了結論. 你想學一下他的思路. 在這兩種情況下, 讓windbg把曾經輸入過的命令按順序寫到文件里的功能就相當有幫助了.命令舉例如下:

⑵ 如何用windbg查看Dump

所以現在大家都開始分析mp了,上次微軟的大牛們過來給表演了一下windbg,
1 安裝windbg (從微軟網站上下載,free), 運行windbg, 設置symbol path,
File- Symbol File Path,
輸入SRV*C:\websymbols*http://msdl.microsoft.com/download/symbols,
如果你已經有了symbo path, 直接輸入就可以了。
2. 生成一個mp, 可以用windbg提供的adplus命令來生成,或者有一個簡單的工具, IIS
Diagnostics, 這個也可以從微軟下, 假設現在你的application hang 或者 crash 了,
運行這個Diagnostics, cancel彈出選擇rule type的對話框,
然後選擇process tab,
找到你要mp的進程, 右鍵生成mp就可以了, 然後可以順便用這個工具直接分析了,還是說winbdg吧。
3. 現在mp有了, 運行windbg,打開這個mp (File- Open
Crash Dump...), 運行下面的幾個命令.
.load path\SOS.dll
(path是全路經,
一般在C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727,
根據自己.net版本選不同的)
.reload -f mscorwks.dll!threads
(察看所有線程(managed),
這步一般就可以看到exception在哪一個線程了, 假設看到在 0 thread)~0s
(轉到 0 thread)
!clrstack (查看call stack)
然後可以通過windbg上面的一些快捷功能打開 Process and Threads 窗口 和 call stack
窗口,雙擊call stack 裡面的 function call, 就可以跳轉到source code了。
!printException
(查看exception, 僅限於managed exception, 找到第一次被拋出來的exception address,
一看就知道哪個了)
!Printexception address
(查看具體的exception)入門結束,不求甚解,慢慢學習.

⑶ WinDbg怎麼用

什麼是WinDBG? WinDbg是微軟開發的免費源碼級調試工具。Windbg可以用於Kernel模式調試和用戶模式調試,還可以調試Dump文件。由於大部分程序員不需要做Kernel模式調試, 我在這篇文章中不會介紹Kernel模式調試。Kernel模式調試對學習Windows核心極有幫助。如果你對此感興趣,可以閱讀Inside Windows 2000和Windbg所帶的幫助文件。這篇文章得主要目的是介紹WINDBG的主要功能以及相關的命令。關於這些命令的詳細語法,請參閱幫助文件。對文章中提到的許多命令,WINDBG有相應的菜單選項。如何得到幫助在命令(Command)窗口中輸入.hh 命會調出幫助文件令。.hh keyword會顯示關於keyword的詳細命令。啟動DebuggerWindbg可以用於如下三種調試:遠程調試:你可以從機器A上調試在機器B上執行的程序。具體步驟如下:
? 在機器B上啟動一個調試窗口(Debug Session)。你可以直接在Windbg下運行一個程序或者將Windbg附加(Attach)到一個進程。? 在機器B的Windbg命令窗口上啟動一個遠程調試介面(remote):.server npipe:pipe=PIPE_NAMEPIPE_NAME是該介面的名字。? 在機器A上運行:windbg –remote npipe:server=SERVER_NAME,pipe=PIPE_NAMESERVER_NAME是機器B的名字。Dump文件調試:如果在你的客戶的機器上出現問題,你可能不能使用遠程調試來解決問題。你可以要求你的用戶將Windbg附加到出現問題的進程上,然後在命令窗口中輸入:
.mp /ma File Name創建一個Dump文件。在得到Dump文件後,使用如下的命令來打開它:windbg –z DUMP_FILE_NAME本地進程調試:你可以在Windbg下直接運行一個程序:
Windbg 「path to executable」 arguments 也可以將Windbg附加到一個正在運行的程序: Windbg –p 「process id」 Windbg –pn 「process name」 注意有一種非侵入(Noninvasive)模式可以用來檢查一個進程的狀態並不進程的執行。當然在這種模式下無法控制被調試程序的執行。這種模式也可以用於查看一個已經在Debugger控制下運行的進程。具體命令如下: Windbg –pv –p 「process id」 Windbg –pv –pn 「process name」 調試多個進程和線程如果你想控制一個進程以及它的子進程的執行,在Windbg的命令行上加上-o選項。Windbg中還有一個新的命令.childdbg 可以用來控制子進程的調試。如果你同時調試幾個進程,可以使用 | 命令來顯示並切換到不同的進程。在同一個進程中可能有多個線程。~命令可以用來顯示和切換線程。調試前的必備工作在開始調試前首先要做的工作是設置好符號(Symbols)路徑。沒有符號,你看到的調用堆棧基本上毫無意義。Microsoft的操作系統符號文件(PDB)是對外公開的。另外請注意在編譯你自己的程序選擇生成PDB文件的選項。如果設置好符號路徑後,調用堆棧看起來還是不對。可以使用lm, !sym noisy, !reload 等命令來驗證符號路徑是否正確。Windbg也支持源碼級的調試。在開始源碼調試前,你需要用.srcpath設置源代碼路徑。如果你是在生成所執行代碼的機器上進行調試,符號文件中的源碼路徑會指向正確的位置,所以不需要設置源代碼路徑。如果所執行代碼是在另一台機器上生成的,你可以將所用的源碼拷貝(保持原有的目錄結構)的一個可以訪問的文件夾(可以是網路路徑)並將源代碼路徑設為該文件夾的路徑。注意如果是遠程調試,你需要使用.lsrcpath來設置源碼路徑。靜態命令:顯示調用堆棧:在連接到一個調試窗口後,首先要知道的就是程序當前的執行情況k* 命令顯示當前線程的堆棧。~*kb會顯示所有線程的調用堆棧。如果堆棧太長,Windbg只會顯示堆棧的一部分。.kframes可以用來設置預設顯示框架數。顯示局部變數:接下來要做通常是用dv顯示局部變數的信息。CTRL+ALT+V可以切換到更詳細的顯示模式。關於dv要注意的是在優化過的代碼中dv的輸出極有可能是不準確的。這時後你能做的就是閱讀匯編代碼來發現你感興趣的值是否存儲在寄存器中或堆棧上。有時後當前的框架(Frame)上可能找不到你想知道的數據。如果該數據是作為參數傳到當前的方法中的,可以讀一讀上一個或幾個框架的匯編代碼,有可能該數據還在堆棧的某個地址上。靜態變數是儲存在固定地址中的,所以找出靜態變數的值較為容易。.Frame(或者在調用堆棧窗口中雙擊)可以用來切換當前的框架。注意dv命令顯示的是當前框架的內容。你也可在watch窗口中觀察局部變數的值。顯示類和鏈表: dt可以顯示數據結構。比如dt PEB 會顯示操作系統進程結構。在後面跟上一個進程結構的地址會顯示該結構的詳細信息:dt PEB 7ffdf000。Dl命令可以顯示一些特定的鏈表結構。顯示當前線程的錯誤值:!gle會顯示當前線程的上一個錯誤值和狀態值。!error命令可以解碼HRESULT。搜索或修改內存:使用s 命令來搜索位元組,字或雙字,QWORD或字元串。使用e命令來修改內存。計算表達式:?命令可以用來進行計算。關於表達式的格式請參照幫助文檔。使用n命令來切換輸入數字的進制。顯示當前線程,進程和模塊信息:!teb顯示當前線程的環境信息。最常見的用途是查看當前線程堆棧的起始地址,然後在堆棧中搜索值。!peb顯示當前進程的環境信息,比如執行文件的路徑等等。lm顯示進程中載入的模塊信息。顯示寄存器的值:r命令可以顯示和修改寄存器的值。如果要在表達式中使用寄存器的值,在寄存器名前加@符號(比如@eax)。顯示最相近的符號:ln Address。如果你有一個C++對象的指針,可以用來ln來查看該對象類型。 查找符號:x命令可以用來查找全局變數的地址或過程的地址。x命令支持匹配符號。x kernel32!*顯示Kernel32.dll中的所有可見變數,數據結構和過程。查看lock:!locks顯示各線程的鎖資源使用情況。對調試死鎖很有用。查看handle:!handle顯示句柄信息。如果一段代碼導致句柄泄漏,你只需要在代碼執行前後使用!handle命令並比較兩次輸出的區別。有一個命令!htrace對調試與句柄有關的Bug非常有用。在開始調試前輸入:!htrace –enable 然後在調試過程中使用!htrace handle_value 來顯示所有與該句柄有關的調用堆棧。顯示匯編代碼:u。程序執行控制命令:設置代碼斷點:bp/bu/bm 可以用來設置代碼斷點。你可以指定斷點被跳過的次數。假設一段代碼KERNEL32!SetLastError在運行很多次後會出錯,你可以設置如下斷點: bp KERNEL32!SetLastError 0x100.在出錯後使用bl 來顯示斷點信息(注意粗體顯示的值):0 e 77e7a3b0 004f (0100) 0:*** KERNEL32!SetLastError重新啟動調試(.restart命令)並設置如下的斷點:bp Kernel32!SetLastError 0x100-0x4fDebugger會停在出錯前最後一次調用該過程的地方。你可以指定斷點被激活時Debugger應當執行的命令串。在該命令串中使用J命令可以用來設置條件斷點:bp `mysource.cpp:143` "j (poi(MyVar)」0n20) ''; 'g' "上面的斷點只在MyVar的值大於32時被激活(g命令條件斷點的用途極為廣泛。你可以指定一個斷點只在特殊的情況下被激活,比如傳入的參數滿足一定的條件,調用者是某個特殊的過程,某個全局變數被設為特殊的值等等。設置內存斷點:ba可以用來設置內存斷點。調試過程中一個常見的問題是跟蹤某些數據的變化。如下的斷點:ba w4 0x40000000 "kb; g"可以列印出所有修改0x40000000的調用堆棧。控製程序執行:p, pa,t, ta等命令可以用來控製程序的執行。控制異常和事件處理:Debugger的預設設置是跳過首次異常(first chance expcetion),在二次異常(second chance exception)時中斷程序的執行。sx命令顯示Debugger的設置。sxe和sxd可以改變Debugger的設置。 sxe clr可以控制Debugger在託管異常發生時中斷程序的執行。常用的Debugger事件有: av 訪問異常 eh C++異常 clr 託管異常 ld 模塊載入-c 選項可以用來指定在事件發生時執行的調試命令。

⑷ windbg的d命令是干什麼的

d,代表data,表示查看數據命令。

⑸ windbg !irp 命令,求大牛詳解

http://www.360doc.com/content/14/1001/17/5470123_413693347.shtml

⑹ WinDbg調試時t命令和p命令的區別

雖然沒用過WinDbg,不過用過簡單的debug,裡面也有t和p命令,我猜想兩者是類似的。

t會進入函數調用中,即call p,會進入入口地址為p的函數中去。

p對於上述情況不會進入函數體,而直接執行call p,並跳躍到下一條指令。

感覺也和VC中的單步和跟蹤差不多。

⑺ windbg是什麼東西拜託各位了 3Q

WinDbg windbg是在windows平台下,強大的用戶態和內核態調試工具。相比較於Visual Studio,它是一個輕量級的調試工具,所謂輕量級指的是它的安裝文件大小較小,但是其調試功能,卻比VS更為強大。它的另外一個用途是可以用來分析mp數據。 雖然windbg也提供圖形界面操作,但它最強大的地方還是有著強大的調試命令,一般情況會結合GUI和命令行進行操作,常用的視圖有:"thread","stack" 和"command",其中command視圖是默認打開的。 下面簡單介紹常用的命令: 查看stack:kb, kp, kP 查看內存:dd,da,db 分析死鎖:!cs, !lock 自動分析:!analyze 載入dll: .load, .reload 顯示載入的模塊信息: lm, lmvm 擴展閱讀: 1 1)你可以從下面這個連接獲取它: http://msdn.microsoft.com/en-us/windows/hardware/gg463016 2 2)利用windbg分析mp數據的一個權威網站: http://mpanalysis.org/ 3 3)windbg命令解釋: http://windbg.info/doc/1-common-cmds.html

⑻ windbg 查看內核函數 求助

首先你要配置好測試環境:參考VMware+Windgb+Win7 內核驅動調試
在你的主機上配置Symbols
配置sympath,C:\Users\Admin\Desktop\first\objchk_win7_x86\i386是你編譯好的sys目錄: SRV*C:\Symbols*http://msdl.microsoft.com/download/symbols;C:\Users\Admin\Desktop\first\objchk_win7_x86\i386
配置Source search path假設文件放在C:\Users\Admin\Desktop\first]: C:\Users\Admin\Desktop\first
然後在命令行中輸入:.reload
打開源文件:Ctrl+O
接著檢查是否已經載入sys.dbg,命令為:
kd> !lmi ndislwf
Loaded Mole Info: [nt]
Mole: ntoskrnl Base Address: 80a02000

Symbol Type: PDB – Symbols loaded successfully from symbol server.
d:\DebugSymbols\ndislwf.pdb\\ntoskrnl.pdb
Compiler: C – front end [13.10 bld 2179] – back end [13.10 bld 2190] Load Report: public symbols
d:\DebugSymbols\ndislwf.pdb\\ndislwf.pdb

接著如果出現如上的結果,表明可以手動設置斷點,否則(個人經驗總是不能設置)。假設在ndislwf 的DriverEntry 設置斷點。在啟動驅動之前,中斷在WinDbg的命令窗口,輸入:bu ndislwf!DriverEntry
接下來開始安裝測試驅動。若執行到DriverEntry該函數,就會停下來,並且會在代碼框中對應的代碼中用紅色標志,然後按F10可以單步調試。
如果查看已經設置哪些斷點:
kd> bl

0 e [d:\winddk\3790\src\general\ioctl\sys\filter.c @ 123] 0001 (0001) ndislwf!DriverEntry

1 e [d:\winddk\3790\src\general\ioctl\sys\filter.c @ 338] 0001 (0001) ndislwf!SioctlDeviceControl+0×103

注意兩件事: 每個斷點都有一個號碼並且顯示出斷點狀態,「e」是「enabled」,而「d」是「disabled」。假設你希望臨時停止使用某個斷點。bd (「Disable Breakpoint」) 將會完成它。你只需指定斷點號碼:

kd> bd 1

kd> bl

0 e [d:\winddk\3790\src\general\ioctl\sys\filter.c @ 123] 0001 (0001) ndislwf!DriverEntry

1 d [d:\winddk\3790\src\general\ioctl\sys\filter.c @ 338] 0001 (0001) ndislwf!SioctlDeviceControl+0×103 ·

相似的方法,永久移除斷點號碼,使用bc 1 (「Clear Breakpoint」)。現在該斷點將會從斷點列表中消除。

假設你希望臨時停止使用某 個斷點。bd (「Disable Breakpoint」) 將會完成它。你只需指定斷點號碼:

kd> bd 1

kd> bl

0 e [d:\winddk\3790\src\general\ioctl\sys\sioctl.c @ 123] 0001 (0001) SIoctl!DriverEntry

1 d [d:\winddk\3790\src\general\ioctl\sys\sioctl.c @ 338] 0001 (0001) SIoctl!SioctlDeviceControl+0×103

· 相似的方法,永久移除斷 點號碼,使用bc 1 (「Clear Breakpoint」)。現在該斷點將會從斷點列表中消除。
就先寫這么寫。怕到時候測試又忘記了。

⑼ 關於windbg的擴展命令

你的調試符號路徑沒有搞吧。菜單->File->Symbol File Path,在裡面填上SRV*D:\Symbols*http://msdl.microsoft.com/download/symbols(其中D:\Symbols是你的本地符號存儲路徑),然後勾選reload,確定。

⑽ 如何用WinDBG遠程調試程序

遠程調試:你可以從機器A上調試在機器B上執行的程序。具體步驟如下:?在機器B上啟動一個調試窗口(DebugSession)。你可以直接在Windbg下運行一個程序或者將Windbg附加(Attach)到一個進程。?在機器B的Windbg命令窗口上啟動一個遠程調試介面(remote):.servernpipe:pipe=PIPE_NAMEPIPE_NAME是該介面的名字。?在機器A上運行:windbg–remotenpipe:server=SERVER_NAME,pipe=PIPE_NAMESERVER_NAME是機器B的名字。Dump文件調試:如果在你的客戶的機器上出現問題,你可能不能使用遠程調試來解決問題。你可以要求你的用戶將Windbg附加到出現問題的進程上,然後在命令窗口中輸入:.mp/maFileName創建一個Dump文件。在得到Dump文件後,使用如下的命令來打開它:windbg–zDUMP_FILE_NAME本地進程調試:你可以在Windbg下直接運行一個程序:Windbg「pathtoexecutable」arguments也可以將Windbg附加到一個正在運行的程序:Windbg–p「processid」Windbg–pn「processname」注意有一種非侵入(Noninvasive)模式可以用來檢查一個進程的狀態並不進程的執行。當然在這種模式下無法控制被調試程序的執行。這種模式也可以用於查看一個已經在Debugger控制下運行的進程。具體命令如下:Windbg–pv–p「processid」Windbg–pv–pn「processname」

閱讀全文

與windbg命令相關的資料

熱點內容
反轉語句python 瀏覽:21
哪個app搞英雄聯盟手游活動 瀏覽:583
如何查看郵箱收發伺服器 瀏覽:519
極簡歐洲史中文版pdf 瀏覽:908
python顯示變數值 瀏覽:387
副路由器為什麼要關伺服器 瀏覽:575
國家反詐騙app蘋果怎麼設置 瀏覽:464
我的世界如何用指令造伺服器方熊 瀏覽:304
鴨題庫是哪裡的培訓機構app 瀏覽:689
如何對伺服器取證 瀏覽:440
有什麼系統像友價源碼 瀏覽:570
圓柱彈簧壓縮量 瀏覽:811
我的世界國際版為什麼沒法進去伺服器 瀏覽:103
我的世界如何創造一個伺服器地址 瀏覽:837
皮皮蝦app怎麼玩視頻教程 瀏覽:253
python整型轉化字元串 瀏覽:804
android數據共享方式 瀏覽:375
編譯環境控制台 瀏覽:620
寧波欣達壓縮機空氣過濾器價位 瀏覽:666
冪函數的運演算法則總結 瀏覽:138