WinDbg'de SOS yüklenemiyor


132

Arka plan: WinDbg'de yeniyim ve ilk kez çalıştırmaya çalışıyorum. Windows Server 2008 (x86) üzerinde IIS 7'de barındırılan ve yerel makineme indirilen çalışan bir ASP.NET 4 sitesinden aldığım bir bellek dökümünü incelemek istiyorum.

Hata ayıklama araçlarını yükledim ve WinDbg'yi ilk kez başlatarak kilitlenme dökümünü açtım . Dosyaya gittim | Symbol File Path ve yolu ayarlayın *srv*c:\symbols*http://msdl.microsoft.com/download/symbols*ve tüm sembollerin yüklenmesi için bekleyin.

SOS'u yüklemeye çalışırken sorunlarla karşılaştım. İlk önce aşağıdaki komutu denedim ...

.loadby sos mscorwks

... ve yanıtı aldı Unable to find module 'mscorwks'.

Web'i taradıktan sonra, aşağıdaki komutu uygulayarak mscorwks yüklemeye çalıştım ...

sxe ld mscorwks.dll
g

... ve "'g'de çalıştırılabilir hata ayıklama hatası yok" yanıtını aldı

SOS.dll dosyasını (C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319'dan) WinDbg dizinine kopyaladım, sonra denedim ...

.load sos

... ve hatayı aldı ...

The call to LoadLibrary(sos) failed, Win32 error 0n193
    "%1 is not a valid Win32 application."
Please check your debugger configuration and/or network access.

Nasıl ilerleyeceğimi tam olarak bilmiyorum. Sadece SOS yüklemek ve bu döküm dosyasını araştırmak istiyorum. Herhangi bir yardım çok takdir edilecektir.

Fyi ... Windows 7'nin 64-bit sürümünde döküm dosyasını Windbg'nin 64-bit sürümüyle açmaya çalışıyorum.

Yanıtlar:


203

CLR çalışma zamanı dll'si clr.dll.NET 4 ile yeniden adlandırıldı . Dolayısıyla, SOS'un doğru sürümünü yüklemek için .loadbykomutunuzu ayarlamanız gerekir . yani

.loadby sos clr

Ayrıca, 64 bit kullanıyorsanız, 32 bit uygulamalarda hata ayıklamak için Windows için Hata Ayıklama Araçları'nın 32 bit sürümünü de yüklemelisiniz. Yan yana kurulurlar, bu nedenle aynı makinede hem 32 bit hem de 64 bit sürümünün olması sorun olmaz.

SOS.dll dosyasını kopyalamaya karşı tavsiye ederim. SOS, çerçevenin tam sürümüyle eşleşmelidir, bu yüzden onu kullanarak çerçeve dizininden yüklediğiniz sürece .loadbyhazırsınız demektir.


En son yükleyiciler CPU tipini otomatik olarak algıladığından, her ikisini de sistemime almakta zorlanıyorum. MSI için bildiğiniz bir geçersiz kılma bayrağı var mı? WinDbg'nin eski bir 32bit sürümünü kuracağım, ancak ne bekleyeceğimi bilmiyorum.
Dave

5
@Dave: Belki çok az geç olabilir, ancak şurada bulunan yükleme web sayfası başına: msdn.microsoft.com/en-us/windows/hardware/gg463009.aspx Her mimari sürümü için MSI'ları buraya koyan Yeniden Dağıtılabilir Paketleri yüklemeyi seçebilirsiniz. : C: \ Program Files \ Microsoft SDKs \ Windows \ v7.1 \ Redist \ Windows için Hata Ayıklama Araçları
Aaron Lerch

.loadby sos clrBen alırım dersem Unable to find module 'clr'. X64 WinDbg ile .NET 4'te hata ayıklamaya çalışıyorum
Csaba Toth

2
@CsabaToth bu bir döküm mü yoksa canlı hata ayıklama mı yapıyorsunuz? Canlı hata ayıklama yapıyorsanız, CLR henüz yüklenmemiş olabilir. Yapabileceğin sxe ld clrCLR yüklendiğinde durdurmak ve daha sonra bu noktada SOS yükleyebilirsiniz.
Brian Rasmussen

@BrianRasmussen Derlenmiş bir yürütülebilir dosyadır. Modüller penceresine bakarsam, yüklendi.
Csaba Toth

18

WinDbg komutu 'g' [Devam et] anlamına gelir

Bir döküm dosyasını açtığınız için 'devam etmenin' bir yolu yoktur, sadece işlem belleğini içerir.

Mesajın "Hayır Yani katedilebilen süreç olmadığı için 'g' de ayıklayıcısındaki hata" sizin durumunuzda mantıklı çalışan .

SOS'un doğru sürümünü yüklemekle ilgili olarak, .NET sürümüne bağlı olarak aşağıdaki komutu kullanın.

.NET 4 ve üstü .loadby sos

.NET 3.5 ve 2 .loadby sos mscorwks

.NET 1.0 ve 1.1 .load clr10 \ sos


1

Yukarıdaki yanıtların iyileştirilmesi gerekir, çünkü zamanla sos yüklemesi işlemek daha kolay hale geldi.

JOHN ROBBINS'in etrafında güzel bir makale var, Microsoft sembol sunucularının sembol dosyası yolunda yapılandırıldığını görün ve windbg komut isteminde! Analiz et -v komutunu çalıştırın, bu, ilgili sos dosyalarını indirecek hile yapacak. Çalıştırma zincirini doğrulamak için komut isteminde ve yüklenen dll'yi göreceksiniz.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.