Windbg(2)

來源:互聯網
上載者:User

標籤:

摘抄於:http://www.cnblogs.com/awpatp/category/228209.htmlDebug相關的一些小技巧摘要: 1. 如何Debug一個進程的子進程? 答: 使用WinDBG attach到父進程, 然後輸入命令".childdbg 1"(無引號). 這樣子進程在剛剛被載入的時候, WinDBG就Attach上去了. 這兩個進程的debug session都在一個WinDBG的視窗裡, 如果想要切換當前進程, 可以使用命令"|"來查看所有的進程, 使用"|0s"來切換到ID為0的進程, 以此類推. ...閱讀全文

 

一些ADPlus設定檔的收集摘要: 定斷點在方法ntdll!RtlEnterCriticalSection 上, 一旦執行到這個方法, 就寫log, 記錄callstack, 並且列印寄存器的值. 定斷點在地址77f5b380 上, 動作同前一個. <ADPlus> <!-- Configuring ADPlus for breakpoints --> <!...閱讀全文

 

Kernel Mode Debugging 初步 一摘要: 什麼是kernel mode debugging? Kernel debugging是使用WinDBG來檢驗受限制的記憶體, 調用棧, 內部資料結構, 內部布局, 以及運行在kernel mode的作業系統組件和驅動的系統資訊的過程. 在kernel mode下, 你debug的是整個作業系統, 而不是某一個應用程式, 線程, 或者進程. 這意味著你對程式的執行擁有完全的控制權, 並且需要保證你...閱讀全文

 

一些debug常用的"魔法"數值摘要: CCCCCCCC 微軟C++ debugging運行時用該值標記未初始化過的棧記憶體 CDCDCDCD 微軟C++ debugging運行時用該值標記未初始化過的堆記憶體 FEEEFEEE 微軟的HeapFree函數用該值來標記被釋放了的...閱讀全文

 

WinDBG中的poi是做什麼用的?摘要: Poi操作符在WinDBG中可以被用來對指標進行解引用. 類似C語言中對指標的操作符*. 比如說, 如果一個地址為0×00123456的指標, 指向地址0×00420000, 即 記憶體位址 地址中存放的值 0×00123456 0×00123456 0×...閱讀全文

 

64位的dump裡如何尋找第一個到第四個參數?摘要: 這篇文章講解的三種方法非常詳細, 還可以跟隨著作者的代碼一起實驗. 推薦. Challenges of Debugging Optimized x64 Code http://blogs.msdn.com/b/ntdebugging/archive/2009/01/09/challenges-of-debugging-optimized-x64-code.aspx 另外兩篇文章也值得一...閱讀全文

posted @ 2012-08-03 14:03 中道學友 閱讀(168) | 評論 (0) 編輯

X64 Calling Convention 的一個實驗摘要: 很久沒更新blog了, 最近比較忙. 這篇文章轉自我的onenote, 所以中英文都有, 記給自己, 也分享給大家. 沒必要糾結語言, 能看懂就行了. 呵呵.以下結論非常重要, 摘自<<Advanced Windows Debugging>> Page 606. Rcx: contains the 1st parameter passed to the function. Rdx: contains the 2nd parameter passed to the function. R8: contains the 3rd parameter passed to the閱讀全文

 

WinDBG指令碼入門摘要: 最近開始看一些針對非主控處理序的WinDBG的使用了, Tess推薦去看Debugging Toolbox. 其第一篇就把我難住了, 指令碼看不懂. 動手實踐了一下, 發現下面的文章所講的內容特別有協助, 於是轉載在這裡. 原文地址 First steps with WinDBG scripting… (Memento) http://www.msuiche.net/2007/08/03...閱讀全文

 

利用PsExec提升命令列的安全層級, 繞過組策略執行命令摘要: 有一次, 我需要在客戶的環境上抓取Time Travel Tracing, 簡稱TTT(dump的一種). 但是就是不能成功抓取. 報錯如下: 具體錯誤資訊如下: c:\Debuggers\ttt>tttracer -dumpfull -out e:\tttoutput -attach 3384 Microsoft (R) TTTracer 2.010.40929 (Se...閱讀全文

 

無法抓DUMP, 報錯"Could not attach to process XXXX, NTSTATUS 0xC0000048"摘要: Problem Description ================= We tried to use ADPlus to capture dump file. But the size of dump files are all under 20K. We tried it many times. Trouble Shoot ================= I tried ...閱讀全文

 

Failed to load data access DLL, 0x80004005摘要: 新年第一篇, 首先祝大家2012身體健康, 工作順利, 先來篇簡單的. 0:031> .load psscor2 0:031> !clrstack CLRDLL: CLR DLL load disabled Failed to load data access DLL, 0x80004005 Verify that 1) you have a rece...閱讀全文

 

記一次糾結的排錯-用WinDBG解決WinDBG Hang的問題摘要: 今天早上, 客戶傳來了一個hang dump, 急著想看看, 結果WinDBG每次在菜單裡點擊了Open Crash Dump之後, 都會hang住. 重試, 結果一樣. 重啟WinDBG, 結果一樣. 重啟機器, 結果一樣. 卸載重裝WinDBG, 結果一樣. 懷疑Debug Diag 1.2有問題, 卸掉, 結果一樣. 修改了預設的symbol path...閱讀全文

 

[技巧]如何獲得某個callstack所線上程的線程號?摘要: 檢查dump檔案的時候, 我們經常會使用下面的命令來獲得所有線程上的調用棧 ~*e !clrstack 輸出結果舉例如下: OS Thread Id: 0x1b30 (15) Child-SP RetAddr Call Site 0000000034a9ed00 000006424e611fc0 System.Thread...閱讀全文

 

記一個在live debugging一個主控處理序時, BPMD無法定下斷點的問題的解決方案摘要: SharePoint 2010的某些DLL會被進行一種叫做Pre-compiling的最佳化, 所使用的工具叫做Ngen.exe. 最佳化過後, 託管的dll會被製作為native image, 之後呢Runtime每次都會使用native image, 而不是傳統的託管DLL. 這種最佳化可以加快DLL的載入, 因為需要執行代碼的很多動作都被提前做好了. 然而, 這樣的最佳化會給在WinDBG中Liv...閱讀全文

 

一點小小的心得摘要: 今天通過看dump來解決一個SharePoint的效能問題, 不小心鑽了牛角尖. 盯著託管調用棧看. 其實, 換成k命令去遍曆每個線程的非託管調用棧, 一下子就看到了絕大多數線程都在等SQL. 所以, 雖然w3wp.exe多數是託管線程在處理頁面請求, 當發現託管調用棧資訊有限的時候, 不妨換非託管調用棧檢查一下.閱讀全文

 

在WinDBG中查看記憶體的命令摘要: 當我們在調試器中分析問題時, 經常需要查看不同記憶體塊的內容以分析產生的原因, 並且在隨後驗證所做出的假設是否正確. 由於各個對象的狀態都是儲存在記憶體中的, 因此記憶體的內容也就相當於對象的狀態. d命令最常見的格式就是根據指定的類型資訊來顯示儲存在某地址中的資料. 調試器並不會去猜測這個地址上儲存的是什麼資料, 因為在大多數情況下猜測都是錯誤的. 所以需要使用者顯式地制定按照何種格式來解析資料. 命令...閱讀全文

 

在WinDBG中查看變數的命令摘要: 命令 ============ dv Display Variable的縮寫, 查看局部變數. dv /i 查看局部變數, 並顯示符號的類型和參數類型. dv /V 查看局部變數, 並顯示變數的儲存位置. dv /V VariableName 指定需要查看的變數的名字 dv 02sample!gGlo* dv命令可以帶有萬用字元, 來查看具有某命名模式的變數. 舉例: dt Display Typ...閱讀全文

 

在WinDBG中設定斷點的命令摘要: 命令==========~0 bp 02sample!KBTest::Fibonacci_stdcall "r esp"在零號線程上的KBTest類的Fibonacci_stdcall函數上設定斷點, 並且在觸發斷點時執行"r esp"命令.bl列出所有已經設定了的斷點bc *清除所有斷點bp 02sample!KBTest::Fibonacci_stdcall “r esp;g”在所有線程上設定斷點, 並且在觸發斷點時執行"resp;g"兩條命令.bm 02sample!*kbtest*命令bm可以在參數中指定一個符號模式, 這樣在所有與這個符號匹配的地址上都將設定一個斷點. 上面的命令使用閱讀全文

 

在WinDBG中查看調用棧的命令摘要: 命令 ========== k k命令顯示的是一定數量的棧幀, 其中幀的數量是由.kframes命令來控制的, 預設值是256。 kp 5 顯示調用棧中前5個函數以及他們的參數. kb 5 顯示調用棧中前五個函數以及他們的前三個參數. kf 5 顯示在調用棧中五個函數所使用的棧的大小. 每個棧幀所佔的空間使用量的計算方法是: 將當前函數的棧基指標與在函數中調用的任何一個函數棧基指標相減. 舉例: 手動構造棧的實踐- 如何手工構造調用棧 ============ 首先用幾幅圖說明一下棧的特點, 協助大家理解. 1. 棧向低地址增長. 2. 向棧中壓入資料, 棧中的情況. 3.閱讀全文

 

在WinDBG中查看函數的反組譯碼代碼的命令摘要: 命令 ========== u . u $ip 上面的兩個命令是效果是一樣的, 反組譯碼當前$ip地址上的8條命令. uf . uf $ip 上面兩個命令的效果是一樣的, 反組譯碼當前$ip地址上的整個函數. ub . ub $ip 反組譯碼$ip之前的8條指令. ub $ip L2a 反組譯碼$ip地址之前的42條指令. u $ip $ip+a 反組譯碼地址$ip到地址$ip+10之間的指令. 注意, 這裡包括$ip, 不包括$ip+10。 舉例:閱讀全文

 

Move EDI, EDI的作用摘要: 玩WinDBG的時候, 發現函數的反組譯碼代碼的最開始部分總是包含一條move edi, edi的指令. 比如下面的代碼產生彙編代碼的開頭部分如下:Push EBP和Mov EBP, ESP兩條指令是標準的棧架構建立的指令, 但是Mov EDI, EDI是做什麼的呢? 看起來它就是兩個位元組的NOP指令.正解:mov edi, edi的確是個雙位元組的no-op指令, 它存在的目的是使得hot-patc...閱讀全文

 

在WinDBG中進行進位轉換和簡單的計算摘要: 在WinDBG中可以進行一些簡單的計算工作, 比如16進位與10進位之間的相互轉換, 加減乘除等. 舉例1, 進位轉換: 注意, 上面的例子中的第二個命令告訴我們, 十進位的數字在windbg中進行表示的時候前面要加上首碼"0n", 而十六進位則可不必帶上首碼"0x". 舉例2, 除法計算: Debugging Tips: Use windbg as a calculator, a chat...閱讀全文

 

偽寄存器摘要: 許多寄存器的名字取決於處理器的架構, 因此對於那些偶爾使用調試器的使用者來說很難記住所有平台上的寄存器名字. 為了克服這個問題, 調試器的Team Dev引入了各種偽寄存器(Pseudo-Register), 由調試器將這些偽寄存器對應到不同的硬體架構上. 所有的偽寄存器都由一個貨幣符號($)開始. 如果你使用MASM文法, 你可以在$符號之前添加一個@符號, 這個@字元會告訴debugger接下來的tok...閱讀全文

 

如何使用符號檔案?摘要: 幾乎每個命令都會直接或者間接地使用符號資訊. 進行符號檢查的命令卻不多. 查看符號的命令是x, 這個字元表示"查看符號". 文法如下所示: 0.00>x [options] module!symbols module和symbols都可以包含萬用字元. 在調試陌生代碼時, 萬用字元是一種功能強大的工具, 因為它使我們在閱讀代碼之前能夠猜測函數的名字或者全域變數. 其中, 帶有_imp首碼的函數...閱讀全文

 

如何驗證已經載入的symbol file與module是否匹配?摘要: 可以使用!chksym命令. 該命令接受一個記憶體位址作為參數, 只要這個記憶體位址屬於某個module的範圍之內, 那麼該命令就會檢查這個module的symbol和module是否匹配. !chksym 01000005 舉例如下:閱讀全文

 

成功運行過的WinDBG Commands–12-26-2010摘要: lm v m 02samp* 列出module的資訊, v代表verbose, 即詳細, m代表可以使用萬用字元, 02samp*意圖是匹配用02samp開頭的所有module !lmi 02sample 顯示模組的header中的資訊. !lmi接受模組名或者模組地址作為參數 !sym noisy !sym quiet 符號載入過程的詳細輸出和非詳細輸出. 用於協助你檢查符號載入過程中可能出現的問...閱讀全文

 

.reload 命令的一些常用形式摘要: .reload /f 命令會強制debugger立即解析所有module相關聯的符號檔案. 於是我就想, 有沒有什麼命令可以立即去掉所有module相關聯的符號檔案呢? 找了半天也沒找到, 最後發現.reload /f的反命令就是.reload 其他形式 =========== .reload <module> 拋棄模組<module>的符號資訊. 任何解析符號的動作都將從硬碟上重新載入符號文...閱讀全文

 

為<<Advanced Windows Debugging>>配置符號路徑摘要: 紙上得來終覺淺, 絕知此事要躬行. 筆者開始動手運行AWD一書中的例子了. 在這裡下載源檔案, 可執行檔以及符號檔案. 一開始設定符號路徑的時候就遇到了困難, 這裡記錄下解決問題的過程. 先把最終可以正常工作的命令寫在這裡: .sympath srv*c:\symstore.pri*http://msdl.microsoft.com/download/symbols 1. 在http:...閱讀全文

 

什麼是符號檔案?摘要: 在構建應用程式, 庫, 驅動程式或者作業系統是, 編譯器和連結器會在建立.exe, .dll, .sys以及其他可執行檔(也被稱為二進位檔案或者映像)的同時, 還會建立一定數量的附加檔案, 這些檔案也被稱為符號檔案(Symbol File). 從Windows Xp和Windows Server 2003開始, 符號檔案只使用PDB格式. 符號檔案通常包含以下內容: 全域變數的名字和地址 函...閱讀全文

 

介紹一個好用的抓取dump的工具-ProcDump摘要: Procdump是一個輕量級的Sysinternal團隊開發的命令列工具, 它的主要目的是監控應用程式的CPU異常動向, 並在此異常時產生crash dump檔案, 供研發人員和管理員確定問題發生的原因. 你還可以把它作為產生dump的工具使用在其他的指令碼中. 有了它, 就完全不需要在同一台伺服器上使用諸如32位系統上的Debug Diag 1.1或是64位系統上的ADPlus了. 問題描述 ...閱讀全文

 

記一個託管的dump無法查看託管調用棧的問題摘要: 朋友讓我幫忙看一個dump, 我開啟看了看, 發現一個怪異的問題. 用命令"~*e!clrstack"查看所有線程的託管調用棧, 居然說所有的線程都不是託管線程. 0:045> ~*e!clrstackOS Thread Id: 0x16d4 (0)Unable to walk the managed stack. The current thread is likely not a manage...閱讀全文

 

使用WinDBG排查應用程式載入時崩潰的問題摘要: 假設有個應用程式, 一啟動就崩潰, 根本就來不及讓你用Visual Studio來Attach, 並且該應用程式在使用Visual Studio直接lunch的情況下又不會出現這樣的問題, 該怎麼辦呢? 除了使用<<在進程崩潰的時候自動抓取一個DUMP檔案>>中的方法, 還可以使用WinDBG直接載入應用程式的可執行檔, 然後在應用程式退出的系統函數上下斷點, 從而得到...閱讀全文

 

如何明確指定命令所在的debugger extension?摘要: 問題的情境是這樣的, 你在看dump檔案, 運行了一個命令, 可是你覺得這個命令跟平常你看到的該命令的輸出有點不大一樣. 你感覺很困惑, 懷疑是不是這個命令不屬於你希望的那個debugger extension. 怎麼辦? 比方說, psscor2.dll 和 sos.dll 都包含有一些命令, 你的debugger 又同時載入了兩個debugger, 你運行了一個!threads, 卻不清楚這...閱讀全文

 

!aspxpages(即!dumphttpcontext)命令輸出的解釋摘要: 在排查ASP.NET網站High CPU問題時, 經常使用hang dump來確定常規手段難以發現的原因. 經常會使用!aspxpages命令來查看當前進程中都有那些資源正被請求, 被請求的資源都運行了多久. 這個命令的輸出樣本如下. 0:000> !aspxpagesGoing to dump the HttpContexts found in the heap.Loading the ...閱讀全文

 

無法查看.NET Framework 1.1的dump檔案?摘要: 經常看的dump都至少是.net framework 2的dump檔案, 冷不丁開一個.net 1.1的dump, 發現問題還挺多. 經過一番摸索, 最後還是成功地查看了這個dump. 解決方案如下: 1. 在debugger所在的機器上安裝.net framework 1.1. 2. 在debugger所在的機器上安裝.net fraemwork 1.1 SP1 3. 使用.loadby so...閱讀全文

 

WinDBG抓Full Memory Dump的命令摘要: .dump /u /ma c:\temp\notepad.dmp 另附ADPlus命令例子 ADPlus -hang -p 1896 –o c:\temp ADPlus -hang -pn myapp.exe閱讀全文

 

介紹SOS中的SaveModule命令摘要: 這個命令允許你把一個已經載入到記憶體中的一個鏡像(DLL, EXE)寫回到一個檔案中. 這非常有用, 尤其是你在debugging一個full memory dump, 並且沒有原始的exe或dll的時候. 這個命令通常用來儲存一個託管二進位資訊到一個檔案中, 稍後你就可以使用Reflector來反組譯碼裡面的代碼了. 首先, 使用lm命令來獲得image的base address. 0:000&g...閱讀全文

 

如何在WinDBG裡獲得關於命令的協助?摘要: 標準命令協助 ============ ? ? /D 元命令協助 ============ .help .help /D .help /D a* 擴充命令協助 ============= !help !help savemodule 在命令列中開啟WinDBG的chm協助 ============= .hh .hh lm 參考資料: Windows Debuggers: Part 1: A...閱讀全文

 

如何從WinDBG命令列得知當前抓取的dump屬於什麼進程?摘要: 可以使用命令"|", 這個command的英文名叫做vertical bar. 舉例: 0:018> |. 0 id: 598 examine name: C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\12\BIN\OWSTIMER.EXE 參考資料: WinDBG協助閱讀全文

 

如何在WinDBG裡儲存運行過的命令的記錄?摘要: 比方說你抓了個full dump, 在debug一個很複雜的問題, 可能你已經有了結果, 或者還在研究當中, 這時你被別的事情打攪了, 回家了, 第二天來重開dump檔案, 不記得昨天做到哪裡了. 在或者說, 你的同事很牛, 他分析了dump檔案並得出了結論. 你想學一下他的思路. 在這兩種情況下, 讓windbg把曾經輸入過的命令按順序寫到檔案裡的功能就相當有協助了. 命令舉例如下: .writ...閱讀全文

 

如何在WinDBG中切換當前的線程?摘要: 命令很簡單: ~0s 切換到0號線程 ~3s 切換到3號線程 一些其他命令: ~*e !clrstack 遍曆每個線程, 依次輸出它們的託管調用棧. !threads 查看所有的託管線程閱讀全文

 

一些關於協助初學者分析dump的連結摘要: Common WinDbg Commands (Thematically Grouped) http://windbg.info/doc/1-common-cmds.html Getting started with WinDbg and Sos.dll http://rynsim.spaces.live.com/blog/cns!1DA5A63F849536B6!671.entry閱讀全文

 

在WinDBG中高亮你輸入的命令, 從而和命令的結果輸出區分開來摘要: 在WinDBG的Command視窗中, 預設情況下, 你輸入的命令很容易和該命令以及附近命令的輸出混雜在一起. 在尋找之前命令的結果的時候, 眼睛看起來會很累. WinDBG提供了一個選項, 通過這個選項, 你可以把命令輸入與輸出的顏色進行設定. 選項名: Prompt level command window text Prompt level command windows text ba...閱讀全文

 

如何將WinDBG中命令的輸出儲存到文字檔中?摘要: 從本質上說, 這個功能是WinDBG的日誌功能的一個應用而已. WinDBG的log功能可以記錄你在WinDBG中使用的每一個命令以及其對應的輸出. 那麼如何開啟WinDBG的日誌功能呢? 首先, 可以選擇從命令列中啟動WinDBG. 舉例, 使用下面的帶有-logo參數的命令: 其次, 如果你已經在一個debug session裡了, 你可以使用.logopen命令來開始記錄.回答本文標題中...閱讀全文

 

The call to LoadLibrary(YourExtensionName) failed, Win32 error 0n14001, “This application has failed to start because the application configuration is incorrect. Reinstalling the application may fix this problem.”摘要: 使用WinDBG, 有時需要載入一些第三方的debugger extension. 這些extension會提供一些功能, 比如說dump特定類型資訊等, 協助你完成debugging的任務. 在載入第三方debugging extension的時候, 如果你遇到了類似標題中的錯誤, 該怎麼辦呢? 原因 ========= 這個第三方的extension的開發平台在出現問題的機器上不存在. ...閱讀全文

 

在WinDBG中使用foreach摘要: 我們可以使用.foreach命令來加工一個或多個debugger命令的輸出結果, 可以把結果集中的每一條結果作為參數傳遞給一個或多個其他的命令. 文法: .foreach [Options] ( Variable { InCommands } ) { OutCommands }.foreach [Options] /s ( Variable "InString" ) { OutCommands ...閱讀全文

 

研究託管記憶體問題時涉及到的工具, 計數器, 和WinDBG命令摘要: Window 工作管理員 ============== Mem Usage 表示的是進程工作集(就像進程\工作集效能計數器)。它並不表示所使用的位元組數(committed bytes)。 VM Size 反映的是供進程使用的位元組數(就像進程\專用位元組數效能計數器)。VM Size 可提供關於您是否面臨記憶體流失問題的第一線索(如果您的應用程式存在泄漏,則 VM Size 會隨時間增加). GC 性...閱讀全文

 

如何在進程建立的過程中Attach上WinDBG摘要: 在排查服務啟動時錯誤的時候, debugger會運行在後台, 我們無法與之互動. 因為服務是運行在一個不同的winstation裡的, 這意味著我們不能通過desktop與它們互動. 這也意味著, 已經載入了的debugger即使在運行, 也是運行在後台, 我們無法與它互動. 解決方案是進入services.msc, 找到這個服務的屬性, 讓它使用local system帳號運行, 然後勾選選項...閱讀全文

 

WinDBG 常用命令表摘要: 啟動, 附加進程, 執行和退出(Starting, Attaching, Executing and Exiting) ======================= Start -> All Programs -> Debugging Tools for Windows -> WinDBG 啟動 F6 attach to process 附加到進程 Ctrl-Break ...閱讀全文

 

在WinDBG中, 使用.shell命令來搜尋字串摘要: 對於我來說, 使用WinDGB時最有用的命令之一就是.shell命令了. Debugging Tools For Windows協助檔案說: .shell命令能載入一個shell進程, 並重新導向它的輸出到debugger中, 或者重新導向到一個指定的檔案裡. 那麼為什麼我覺得載入一個shell進程會對日常工作有協助呢? 載入shell進程最簡單最常用的功能就是搜尋字串. 你也許會想, 為什麼不在...閱讀全文

 

SOS 的協助輸出摘要: SOS是一個debuger的擴充DLL, 它的設計目標就是協助我們debug託管程式. 下面的命令是按照類別排列的, 然後大致上是按照重要性進行的排序. 摘自 Windbg的協助輸出 !help閱讀全文

 

WinDbg.exe中使用的SOS.dll的命令列表摘要: SOS Debugging Extension (SOS.dll) 可以在WinDgb.exe和Visual Studio中通過提供CLR內部環境資訊的方式, 協助你debug託管程式. 這裡的命令列表在WinDbg的協助中是找不到的. 列在下面, 備查. Command Description BPMD [<module name> <method name>] [-m...閱讀全文

 

記一次看DUMP的實戰摘要: 命令: .sympath srv*d:\symcache*\\symbols\symbols 解釋: The .sympath command changes the default path of the host debugger for symbol search. 命令: .reload /f ntdll.dll 解釋: The .reload command deletes all s...閱讀全文

 

如何在x64的機器上使用WinDBG來debug一個32bit的.NET應用程式摘要: 遇到一個錯誤: The call to LoadLibrary(C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\sos) failed, Win32 error 0n193 搜尋發現下面的文章, 要點陳列如下. 未完... 原文地址: How to use Windbg to debug a dump of a 32bit .NET app run...閱讀全文

 

Deferred Symbol Loading摘要: 預設情況下, symbol資訊實際上並不是在target module載入的時候被載入的. 取而代之的是, symbol是在debugger需要的時候再載入的. 這叫做deferred symbol loading 或 lazy symbol loading. 當這個選項開啟的時候, debugger會在任何它遇到一個不認識的symbol的時候載入symbols. 摘自: Debugging ...閱讀全文

 

在進程崩潰的時候自動抓取一個DUMP檔案摘要: 在如下的情況下需要使用這樣的技巧: 1. 生產環境上出問題, 我們需要抓取dump檔案, 線上下去debug. 2. 正在運行一大堆測試, 當其中一個崩潰的時候, 不希望在運行時幹擾整個測試動作, 僅需要收集一些測試資訊. 3. 問題在串連到debugger後無法重現. 簡單來說, 就是你希望在對環境影響最小的前提下, 抓取儘可能多的資訊. 為了滿足這種需求, 最好的方式是配置 just-in-...閱讀全文

 

關於DUMP的基礎知識摘要: 什麼是記憶體轉儲檔案, 即dump? ====================== 記憶體轉儲檔案時一個進程或系統在某一給定的時間的快照. dump檔案的種類有很多, 不同種類的dump檔案包含不成程度的資料. 使用者態記憶體轉儲檔案 VS 核心態記憶體轉儲檔案 ====================== 如果你抓一個進程的dump檔案, 那麼你抓取的是使用者態的dump檔案. 如果你抓取整個系統的記憶體d...閱讀全文

 

Symbol摘要: Symbol能夠包含以下的一些資訊: 全域變數 局部變數 函數名稱, 參數 結構體 原始碼行號 有三種類型的Symbol export symbols是dll本身的一部分. 比如ntdll.dll和kernel32.dll暴露出很大一部分他們的函數, 以便於他們能夠像API一樣地調用, 但是大多數的dll會有很少的exported symbols. 大致上, export symbol...閱讀全文

 

ADPlus摘要: 什麼是ADPlus? =============== ADPlus是一個Microsoft Product Support Services (PSS) 的工具, 可以用來排查任何進程或者應用程式的停止回應(hang), 或者崩潰(crash)的錯誤. 經常地, 你可以使用ADPlus(ADPlus.vbs)作為Microsoft Internet Information Server (IIS)...閱讀全文

 

First chance exceptions 和 Second chance exceptions摘要: 每種類型的異常(如存取違規或堆疊溢位)都可以作為First chance exceptions(第一次偶然發生的異常) 或 Second chance exceptions(第二次偶然發生的異常)對偵錯工具引發。 根據定義,除非未被錯誤處理程式正確地處理, 否則First chance exceptions是非致命的異常。如果的確未被錯誤處理程式正確地處理,那麼它將作為Second chance...閱讀全文

 

關於抓DUMP的一些連結摘要: Debug Diagnostic Tool 和 WinDBG 的比較 這篇文章中, 比較了二者的區別, 介紹了一些簡單的用法, 比如分別如何抓hung dump, crash dump. http://blogs.msdn.com/tess/archive/2008/05/21/debugdiag-1-1-or-windbg-which-one-should-i-use-and-how-do-i-...閱讀全文

 

WinDBG命令概覽(下) - 擴充命令摘要: 擴充命令(Extension Command)用於實現針對特定偵錯目標的調試功能. 與標準命令和元命令是內建在WinDBG程式檔案中不同, 擴充命令式實現在動態載入的擴充模組(DLL)中的. 利用WinDBG的SDK, 使用者可以自己編寫擴充模組和擴充命令. WinDBG程式包中包含了常用的擴充命令模組. 存放在以下幾個子目錄中. NT4CHK: 偵錯目標為Windows NT 4.0 chec...閱讀全文

 

WinDBG命令概覽(中) - 元命令摘要: 元命令(Meta-Command)用來提供標準命令沒有提供的常用調試功能, 與標準命令一樣, 元命令也是內建在調試器引擎或者WinDBG程式檔案中的. 所有元命令都已一個點(.)開始, 所以元命令也被稱為點命令(Dot Command). 按照功能, 可以把元命令分成如下幾類. 顯示和設定偵錯工作階段和調試器選項. 用於符號選項的.symopt- Set Symbol Options 用於符號路...

 

WinDBG命令概覽(上) - 標準命令摘要: WinDBG的大多數功能是以命令方式工作的, 本系列將介紹WinDBG的三類命令, 標準命令, 元命令和擴充命令. 標準命令 =============== 標準命令用來提供適用於所有偵錯目標的基本調試功能. 所有基本命令都是實現在WinDBG內部的, 執行這些命令時不需要載入任何擴充模組. 大多數標準命令是一兩個字元或者符號, 只有version等少數命令除外. 標準命令的第一個字元是不分大小...

 

經典線程死結摘要: 代碼例子如下:public class TestDeadLock implements Runnable{ public int flag = 1; static Object S1 = new Object(), S2=new Object(); public void run() { System.out.println("flag="+flag); if(flag==1) { synchro...

 

Crash dump中需要重點關注的資訊摘要: Crash都是發生在某一函數中, 而95%的crash都是由下面兩種情況中的一種導致的: 發生crash的函數獲得了錯誤的參數. 發生crash的函數使用了損壞了的內部資料. 代碼的執行過程是對資料進行變化的過程. 對同一段代碼, 在相同環境下, 如果使用的資料都相同, 那麼執行的結果肯定是唯一的. 如果函數發生崩潰, 那麼肯定是使用到的資料跟理想情況有差別. 函數使用的資料來源: 一是函數傳入的...

 

通過簡單Dump能獲得的基本資料摘要: 如果有出錯程式的dump, 哪怕dump不是在合適的時機擷取的, 也可以分析出有用的資訊. 通過vertarget查看系統版本和系統運行了多長時間. 通過!peb查看環境變數的情況. 由於很多第三方軟體都習慣把自身路徑添加到環境變數中, 所以這裡很多時候可以看出一些已經安裝的軟體. 同時還能看到當前進程所載入的DLL和對應路徑. 檢查DLL和對應路徑時, 可以重點檢查如下的一些項目: 有沒有防毒程...

Windbg(2)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.