!*<函數名>*查看符號lm-f顯示已經載入的模塊及其完整路徑sxe<異常類型號>發生指定異常時中斷元命令.hh<命令名>打開幫助文檔,并顯示其命令的文檔索引.logopen/t/u<日志文件路徑>創建日志文件,將在windbg所有的輸出" />

亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

windbg筆記

系統 2141 0

數據結構

Module

EEClass

MD(Method Desc)

MT(Method desc Table)

Object

基本命令

  • ? ? ~*e!clrstack

? ? ? 查看所有持有和等待鎖的線程(的下一條要執行的代碼)

  • ? ? k

? ? ? 觀察非托管堆棧

  • ? ? x <模塊名>!*<函數名>*

? ? ? 查看符號

?

  • lm -f

?

? ? ??顯示已經載入的模塊及其完整路徑

?

?

  • sxe <異常類型號>

?

? ? ? 發生指定異常時中斷

?

? 元命令

  • .hh <命令名>

? ? ??打開幫助文檔,并顯示其命令的文檔索引

?

  • .logopen /t/u <日志文件路徑>

?

? ? ??創建日志文件,將在windbg所有的輸出同時寫入此文件

?

  • .chain

? ? ? 顯示已經載入的擴展模塊與擴展模塊搜索路徑鏈

  • .loadby?<要加載的模塊名> <已經加載的模塊名>

?

? ? ??.Net 3.5版本及以下:.loadby sos mscorwks

? ? ? .Net 4.0:.loadby sos clr

? ? ? silverlight:.loadby sos coreclr

  • ? ? .dump?/ma <full dmp文件路徑>
  • ? ? .unload?
  • ? ? .unloadall
  • ? ? .help
  • ? ? .time

? ? ? 看進程運行了多長時間

  • ? ? vertarget

? ? ? 查看操作系統的信息


sos.dll擴展模塊命令

  • !help
  • !dumpstackobjects

? ? 顯示當前堆棧上的所有托管對象,包括本地變量與參數

  • ? ? !threadpool

? ? 查看線程池的運行情況

  • ? ??!runaway

? ? 查看線程運行了多長時間

?

  • !gchandles

? ?查看gc handle的統計情況

  • ? ? ~<線程序號> s

? ? 切換到指定線程

  • ? ? !clrstack

? ? 顯示當前線程的托管堆棧(能顯示其代碼行),使用p參數顯示傳入參數,使用l參數顯示局部變量,使用a參數顯示兩者

  • ? ? !dumpstack

? ? 同時顯示托管堆棧與非托管堆棧

  • ?!ip2md <代碼地址>

? ? 獲取代碼地址處的MethodTable結構。!clrstack命令結果的IP列即為代碼地址。

  • !DumpVC <MethodTable address> <address>

?? ? 顯示指定類實例的指定成員的值

  • ? ??!eeheap -gc

? ??? 查看托管堆的總信息

  • ? ? !dumpheap -min 200 -stat

? ? ? 獲取占用堆內存的各對象的統計信息

  • ? ? !dumpheap -type Byte[] -min 200

? ? ? 查看各Byte數組占用堆內存的詳細信息

  • ? ? !dumpheap -mt <MethodTable地址>

? ? ? 顯示托管堆中指定的MethodTable結構的那些對象的信息

  • ? ? !gcroot <對象地址>

? ? ? 看對象引用關系

  • ? ? !do <對象地址>?

? ? ? 查看對象的詳細信息

  • ? ? !da <對象地址>

? ? ? 獲取數據對象的詳細信息

  • ? ? !dso (DumpStackObjects)

? ? ??查看當前堆棧的所有對象

  • !objsize

? ? ??查看對象的大小

?

  • !FinalizeQueue

?

? ? ??查看終結對象隊列 ? ? ?

  • ? ? !analyze -v

? ? ? 分析掛掉線程的詳細情形,錯誤原因

  • ? ? !threads

? ? ? 看所有的線程統計情況,包括崩潰后各線程拋出的異常。第1列為WinDbg內置線程號(可使用“~<內置線程號>s”功能切換堆棧),第2列為托管線程號,第3列為系統線程號

  • ? ? !syncblk

? ? ? 查看哪些線程拿到了鎖

  • ? ? !pe

? ? ? 獲取當前堆棧拋出的異常信息

?

  • ? ? !pe <異常類型的對象的地址>

? ? ? 格式化打印輸出指定Exception對象的信息

?

  • !eestack -short -ee

? ? ? 顯示所有感興趣的(持有鎖的、被劫持以執行一個垃圾收集操作、正在托管代碼中執行)托管線程的堆棧

?

  • !bpmd <模塊名> <命名空間名.類名.方法名>

?

? ? ?在指定的方法處下斷點。之后可以使用:

? ? ?!clrstack -a:查看當前的堆棧(帶參數信息)

? ? ?g:繼續執行至下一個斷點

?

  • !name2ee <模塊名> <類型名或方法名>

? ? ?顯示指定模塊中指定類型或方法的 MethodTable 結構和 EEClass 結構

?

  • !soe -create system.Exception -1

? ? ?當程序出現system.Exception后, 斷下來

psscor.dll擴展模塊命令

可從DebugDiag的安裝目錄獲取psscor2.dll、psscor4.dll

  • ? !printDateTime
  • ? !convertVTDateToDate
  • ? !convertTicksToDate
  • ? !printIPAdress
  • ? !dumpXmlDocument
  • ? !dumpCollection
  • ? !dumpThreadConfig
  • ? !dumpField

? ? 獲取類的字段值

  • ? !dumpDataTables

? ? 獲取所有DataTable實例

  • ? !dumpColumnNames

? ? 獲取指定DataTable的所有列名

  • ? !aspxpages
  • ? !dumpASPNETCache
  • ? !dumpHttpRuntime
  • ? !dumpRequestQueues
  • ? !dumpRequestTable
  • ? !dumpHistoryTable
  • ? !dumpBuckets
  • ? !GetWorkItems

?

?

解決mscordacwks.dll版本錯誤的問題

  1. 使用.cordll命令查看需要的版本
  2. 在本地建目錄A,并將其路徑加入windbg的符號搜索目錄路徑鏈的鏈首
  3. 從運行調試目標應用程序的機器上拷貝以下正確版本的DLL至目錄A:
    • mscordacwks.dll(在客戶端機通過.cordll命令獲取其路徑):改成指定的文件名,然后后用.cordll -ve -u -l重新載入。
    • SOS.dll:使用.load進行載入。

另外若要使用VS調試dmp文件,那將mscordbi.dll文件拷貝至應用程序所在目錄,以防止出現異常。


備注

  • ? ? 若表現為界面死掉,就直接找UI線程(STA線程就一個)
  • ? ? 堆棧分為本地堆棧與托管堆棧,線程號也有本地線程號與托管線程號
  • ? ? 在64位的winodws上使用任務管理器獲取的dmp為64位,即使跑的是32位的應用程序,所以得使用windbg、adplus、debugdiag獲取
  • ? ? 32位應用程序的dmp使用32位的windbg進行分析,64位應用程序的dmp使用64位的windbg
  • ? ? 符號文件路徑:C:\Users\Administrator\Desktop\ConsoleApplication1t;SRV*C:\symbolscache*http://msdl.microsoft.com/download/symbols
  • ? ? 使用VS分析.dmp文件時,注意另創建系統符號文件緩存目錄,否則下載過來的符號文件默認存儲在臨時目錄可能會被刪除。
  • ? ? 使用!Threads可查看所有線程以及其類型,除了手動創建Thread的類型為MTA外,使用ThreadPool,Timer,Task創建的線程的類型皆為(Threadpool Worker)
  • ? ? (堆)內存碎片可通過!dumpheap <起始地址(任意一塊free的地址)> <前面的地址>+<空間差>查看是由于什么對象造成的碎片
  • ? ? 使用WinDbg打開dmp文件后直接運行“!analyze -v”,WinDbg會自動載入sos.dll。
  • ? ? 若要使用WinDbg為Windows Api下斷點,必須先載入其符號文件(如user32.pdb,可以將其直接指向到vs所使用的符號文件目錄),可使用“x user!*”查看符號文件中所有的函數,并且注意下斷點時一定要寫上符號文件名
  • ? ? 句柄(IntPtr)是指針的指針,保存著目標對象的內存地址,可使用dd命令查看(取前4個字節表示的第一個地址)
  • ? ? System.Threading.Thread對象的ManagedThreadId在線程消亡后是可以被重新使用的,所以當檢查到SynchronizationContext中的托管線程號指向到一個線程,并不表示SynchronizationContext一定是此線程創建的。

參考

? PSSCor2: Object Inspection Commands, Part 1
? PSSCor2: Object Inspection Commands, Part 2
? Debugging Tools for Windows: The psscor2 Managed Code Debugger Extension
? SOS.dll(SOS 調試擴展)
? SOS.dll (SOS Debugging Extension)

? 如何使用Windbg等工具來診斷調試.NET程序

?? Investigating Memory Issues

?? Windbg 調試.net程序


windbg筆記


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦?。?!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 美女精品久久久久久国产潘金莲 | 四虎影视永久免费视频观看 | 加勒比黑人在线 | 国产成人青草视频 | 欧美一级www片免费观看 | 亚洲一区免费在线观看 | 欧美在线一区视频 | 亚洲五月激情 | 国产精品自拍视频 | 韩国日本三级在线观看 | 久久视频免费在线观看 | 成人精品视频网站 | 国产精品亚洲一区二区三区久久 | 亚洲欧美中文字幕 | 日本久久中文字幕精品 | 美女69xxxxxxxx| 国产亚洲欧美ai在线看片 | 久久黄色网 | 免费观看黄色的网站 | 亚洲欧美成人综合 | 日本美女视频韩国视频网站免费 | 就色干综合 | 国产精品久久久久久久久久一区 | 国产成人在线视频免费观看 | 国产精品美女一区二区三区 | 色妞ww精品视频7777 | 免费一级黄色录像 | 日日摸日日添日日透 | 中国美女牲交一级毛片 | 私人影院在线播放 | 久久精品国产亚洲妲己影院 | 欧美高清在线精品一区二区不卡 | 亚洲成人免费视频 | 伊人色综合网一区二区三区 | 九九热久久免费视频 | 99九九国产精品免费视频 | 我想看一级毛片 | 狠狠色噜噜综合社区 | 天天操天天看 | 在线播放精品一区二区啪视频 | 精品精品国产高清a毛片 |