WINDBG學習

1. 下載安裝Windbghtml

    http://www.windbg.org/      Debugging Tools for Windows 10 (WinDbg)  下載Windows 10 SDKjava

2.  Create Dump Fileweb

    cpu 使用量太高時,任務管理器找到相應的進程並dump files。spa

3. Using Windbg 查找Root Cause.net

   打開對應版本的WinDbg, Ctrl+D 打開.DMP文件線程

   !loadby sos clr      加載Son of Strike extension (包含不少有用的debug .net 代碼的方法)debug

   !runaway     列出全部的線程及執行用戶模式user mode代碼的時間。當處理cpu100%問題是,查看一直執行的線程,通常是開頭幾個。指針

   ~線程編號s  選擇指定的線程htm

  !CLRStack    查看指定的線程當前正在作什麼,找到stuck中的方法blog

  分析問題後,查看對應用戶代碼,找出問題點

 ~線程編號s   指定線程

!CLRStack -p  列出stack trace 而且每幀的參數
好比 

iPaper.BL.Backend.Modules.Paper.Settings.SettingDescriptionCache.GetAllDescriptions(iPaper.BL.Backend.Infrastructure.PartnerConfiguration.IPartnerConfig) PARAMETERS: partnerConfig (0x00000000543ac650) = 0x0000000260a7bd98

  左側的是本地內存指針地址,右側是變量 實際存儲地址。

!do  0x0000000260a7bd98   能夠查看到變量的值

參考  https://improve.dk/category/IIS/

 !threads  列出託管線程

!threadspool   列出線程池狀況   

       CPU utilization: 0%
       Worker Thread: Total: 17 Running: 0 Idle: 17 MaxLimit: 32767 MinLimit: 8
       Work Request in Queue: 0
       --------------------------------------
       Number of Timers: 2
       --------------------------------------
       Completion Port Thread:Total: 2 Free: 2 MaxFree: 16 CurrentLimit: 2 MaxLimit: 1000 MinLimit: 8

.time  查看CPU使用狀況,分析User time

!runaway  查看thread佔用時間,對比User time, 找出佔用比最高的那個通常是問題點

~線程s    切換到指定線程

k            查看調用堆棧

!clrstack  用SOS列出託管方法調用堆棧

!SaveModule <Base address> <FileName>  如果沒有源碼,則須要先用!DumpDomain  找到程序集,base Address還能夠經過lm命令查看加載的module來獲取。 而後保存此model,再反編譯dll

參考:https://www.cnblogs.com/lbq1221119/archive/2008/06/17/1224301.html

 

錯誤解決

若執行 !clrstack 出現報錯

OS Thread Id: 0xbcd24 (35)
Unable to walk the managed stack. The current thread is likely not a
managed thread. You can run !threads to get a list of managed threads in
the process
Failed to start stack walk: 80070057

執行~*e!clrstack查看全部持有和等待鎖的線程(的下一條要執行的代碼)

 

https://www.cnblogs.com/javawebsoa/archive/2013/05/20/3089381.html

相關文章
相關標籤/搜索