PSSCOR2: WinDBG ile .NET debugging (hata ayıklama) için yeni bir extension


Uygulama geliştiricilerin karşılaşmış olduğu uygulamanın beklenmedik şekilde yanıt vermemesi (hang) ya da çökmesi (crash) gibi durumlarda kullanılan yöntemlerden bir tanesi de dump analizidir.

Dump dosyası, kısaca uygulamanın işletim sisteminin belleğindeki resminin diske yazılmış halidir. Bir problem sırasında manuel ya da otomatik bir şekilde dump dosyası oluşturulabilir ve dump analizi yapabilen bir uygulama (debugger) içinde sorunun neden kaynaklandığı araştırılabilir.

 

Dump analizi sırasında kullanılan uygulamalardan bir tanesi de WinDBG’dir. WinDBG, dump, dump toplama ile ilgili kapsamlı bilgiler için Faik’in blog sayfasını inceleyebilirsiniz: http://blogs.msdn.com/faik/

 

WinDBG ile birlikte gelen oldukça kapsamlı komutlar genel olarak Win32 uygulamalarının debugging’i için oldukça faydalıdır. Aynı komutları .NET ile geliştirilmiş uygulamaları debug ederken de kullanabilirsiniz ancak bu nispeten zahmetli bir iş olacaktır. Bu işi kolaylaştırmak için bazı eklentiler (extension) hazırlanmıştır. Bunlardan bir tanesi her .NET Framework sürümü ile birlikte gelen SOS extension’ıdır. Oldukça faydalı bu extension ile WinDBG içinde .NET debugging yapmak son derece zevklidir. SOS extension’ı pek çok faydalı komut içermesine rağmen bazı noktalarda eksik kalmaktadır.

 

İşte PSSCOR2 bu noktada SOS ile birlikte gelen komutlara yenilerini ekleyerek .NET debugging’i daha kolay ve zevkli hale getirmektedir.

 

Şimdi PSSCOR2’yi indirip WinDBG içinde yüklemeyi ve bazı komutları görelim.

 

PSSCOR2’yi WinDBG içinde yüklemek:

 

1)    Eğer kurulu değilse WinDBG’yi indirip kuralım. Detaylar için http://blogs.msdn.com/b/faik/archive/2010/05/07/DebuggerInstallation.aspx blog’unu inceleyebilirsiniz.

2)    PSSCOR2 extension’ının ilgili versiyonunu http://www.microsoft.com/downloads/details.aspx?FamilyID=5c068e9f-ebfe-48a5-8b2f-0ad6ab454ad4&displayLang=en adresinden indirip EXE dosyasını bir klasöre açalım. Dosyayı açtıktan sonra bir zip dosyası daha gelecektir. Bu zip dosyasını da açalım. Bu dosyanın içinden de PSSCOR2’nin x86, x64 ve ia64 versiyonları gelecektir.

Debug etmek istediğiniz uygulamanın mimarisi ne ise, kullanmanız gereken debugger ve PSSCOR2 versiyonu aynı olmalıdır. Örneğin, 32bit çalışan bir ASP.NET 2.0 uygulamasını debug etmek istiyorsanız WinDBG ve PSSCOR2’nin 32bit versiyonlarını kullanmanız gerekmektedir. Aynı şekilde ASP.NET 2.0 uygulamanız 64bit çalışıyorsa, debug edebilmek için WinDBG ve PSSCOR2’nin 64bit versiyonlarını kullanmanız gerekmektedir.

3)    WinDBG kurulumunu yapmış olduğunuz klasör içine aynı mimarideki (örneğin x86) PSSCOR2.dll dosyasını kopyalayın.

4)    Test ortamında ya da geliştirme ortamında çalışan bir ASP.NET 2.0 uygulamanızın dump’ını alın. Bunun nasıl yapılacağını bilmiyorsanız aşağıdaki blog’ları inceleyebilirsiniz:

a.    http://blogs.msdn.com/faik/

b.    http://blogs.msdn.com/b/cenkiscan/archive/2008/05/29/debug-diagnostics-tool-nas-l-dump-alaca-m.aspx

c.    http://blogs.msdn.com/tess/

 

Ek olarakTess’in ASP.NET debugging demo uygulamasını ve açıklamalarını da kullanabilirsiniz: http://blogs.msdn.com/b/tess/archive/2008/02/04/net-debugging-demos-information-and-setup-instructions.aspx

5)    Dump dosyasını WinDBG içinde açın ve “symbol path”i ayarlayın. Eğer bu kavramlar size yabancıysa yine Tess’in yukarıda linkini verdiğim blog post’unu ve diğer blog post’larını inceleyebilirsiniz. Kısa bir süre sonra bu adımları da Türkçe olarak ekleyeceğim.

6)    PSSCOR2’yi yükleyin: !psscor2.load

 

Bazı PSSCOR2 komutları:

!help: psscor2 komutlarını listeler.

!ASPXpages: Thread’lerde çalışan (ya da çalışması bitmiş ancak henüz GC tarafından temizlenmemiş) ASPX isteklerini listeler.

!DumpAllExceptions (!dae): Tüm thread’lerdeki managed exception’ları listeler.

!DumpDataTables: Heap’teki data table’ları ve kolon / satır sayılarını listeler (özellikle yüksek bellek kullanımlarında datatable’ları listelemek için oldukça faydalı bir komut).

!DumpColumnNames (!dcn): Verilen data table nesnesinden kolon isimlerini listeler.

!DumpThreadConfig (!dtc): maxConnections, minThreads, vs. gibi konfigürasyon bilgilerini listeler.

!FindDebugTrue: Debug mode çalışan web sitelerini listeler.

!FindDebugModules: Debug mode çalışan modül/DLL’leri listeler.

 

Yüklenmiş olan extension’ların yüklenme sıralarına göre bazı durumlarda yukarıdaki komutları çalıştırmak için komutun önüne extension ismini yazmanız gerekebilir. Örneğin: !psscor2.help

 

Komutlar hakkında daha detaylı bilgi alabilmek için help komutundan sonra komutun ismini verebilirsiniz (kısaltmasını değil). Örneğin: !psscor2.help DumpAllExceptions

 

AMB

Comments (0)

Skip to main content