Windows調試學習筆記:(一)WinDBG中加載SOS和CLR


  最近產品環境出現了部分服務器當機情況,雖然重啟之后問題就不出現了。但本着徹底解決問題的態度,想要找到root cause。多次嘗試Visual Studio失敗(可能是代碼驚醒了優化和簽名)之后,決定使用WinDBG來調試。於是。。。災難發生了。

  想要一次性成功搭建測試環境,那得靠人品。看來我近來人品積累的不夠,不斷的有小問題出現。比如加載SOS和CLR,就讓我不勝其煩。必須得記下來,分享出來,以節省大家的時間。

  問題一:WinDBG分X86和X64兩個版本

  如果你用的是32位的WinDBG,那直接打開就行;你如果用的是64位的版本,那么如果調試64位代碼也直接打開,如果調試x86的代碼,要使用Wow64下的WinDBG.exe。

  問題二:確定SOS和CLR的位置和版本

  如果安裝了Visual Studio的機器,可以打開VS的命令行,輸入where sos.dll命令,可以找到sos.dll的全路徑(需要說明的是,找到的不一定是全部的文件)。它的一般位置在C:\Windows\Microsoft.NET\Framework?\version?\SOS.dll。其中Framework?包括Framework和Framework64兩個版本;version?包括v2.0.50727,v3.0,v3.5和v4.0.30319等版本。文件確切路徑的選擇依據要調試程序的版本而定,一般為C:\Windows\Microsoft.NET\Framework\v4.0.30319\SOS.dll,CLR為同一目錄下的CLR.dll文件。

  問題三:加載SOS和CLR

  運氣好的話,使用命令.load C:\Windows\Microsoft.NET\Framework\v4.0.30319\SOS.dll可以加載成功。如果失敗,特別是出現The call to LoadLibrary(C:\Windows\Microsoft.NET\Framework\v4.0.30319\sos.dll) failed, Win32 error 0n193這樣的錯誤,請確認加載sos.dll的版本是否正確。

  此外,加載不出錯,並不見得可以直接使用。可以嘗試命令.loadby sos clr。如果命令成功,那么測試環境好了。如果出現了“Unable to find module 'clr'”這樣的錯誤。請鍵入g讓調試程序運行一會兒,停下來的時候再嘗試命令.loadby sos clr,這時一般都會成功。

  結語:WinDBG是個神器,得好好琢磨,好好使用。

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM