Merhaba Arkadaşlar,

Bir süredir Microsoft destek grubunda development ekibinde çalışıyorum. Yazılım geliştiricilere yardımcı olabilmek için, takım arkadaşlarımla beraber bu blog’u oluşturduk.

Çocukluğunda meraktan birçok elektronik aleti söküp içerisini kurcalayanlarınız olmuştur. İlk bloğumda aynı şekilde .net uygulamalarının içini kurcalayabilmek için tornavida görevini görecek debugging araçlarının kurulumu ve temel Extension’lar ile ilgili bilgi vereceğim.

Uygulama için kullanacağımız debugger, uygulamanın çalıştığı mimariye göre değişiyor. 32 bitlik uygulamalar için 32 bitlik debugger, 64 bitlik uygulamalar için 64 bitlik debugger kurmalısınız. Kurulum sonrasında kullanacağımız uygulamanın ismi Windbg.exe.

Kurulum için aşağıda şu linki takip edebilirsiniz.

Debugger kurulumundan sonra ‘windbg.exe’ uygulamasını çalıştırdığınızda 2 seçeneğiniz var :

  1. ‘Post mortem debugging’ : Yani elinizide sorun anında aldığınız bir ‘crash’ yada ‘hang’ dump vardır, bunu incelemek istersiniz. (Windbg.exe içersinden File -> Open Crash Dump , yada Ctrl+D kısayolu ile)
  2. ‘Live debugging’ : Çalışmakta olan bir process’e attach olup, bu process I canlı olarak debug edebilirsiniz. (Windbg.exe içerisinden, File -> Attach to a process, yada F6)

Her iki yöntemde de debugger’ın çalışma mantığı aynıdır.

Birinci seçenek için dump alma yöntemleri çok çeşitli olmakla beraber, bunlardan yaygın olanı adplus.exe’dir. 'Adplus.exe' , 'windbg.exe' ile aynı klasörde bulunur ve arka planda ‘cdb.exe’ ‘yi kullanmaktadır. Adplus kullanımı için en iyi referans gine Adplus.exe’nin yardım komutu’dur .

  adplus /?

Bu tool’u kullanarak örneğin ‘deneme.exe’ uygulamasının dump’ını c:\dumps klasörüne şu şekilde alabilirsiniz:

 adplus -hang -pn Deneme.exe -o c:\dumps –quiet.

Crash dump’ı ise şu şekilde alınabilir:

adplus.exe -crash -dumpFull -pn Deneme.exe -o c:\dumps -quiet

Dump aldıktan sonra *.dmp uzantılı bu dump dosyasını Windbg.exe içerisinden CTRL+D kısayolu ile açabiliriz. Bu noktada artık debugging dünyasına girmiş oluyoruz. Artık tüm programları durdurup, inceleme gücümüz var :)

Öncesinde bir şey daha yapmalıyız: 'Windbg.exe' nin sembol ayarları. Sembol dosyalarının ayarlanması ve temel komutlar için bu makaleyi takip edebilirsiniz.

Debugger’da sembol ayarlarını yaptıktan sonra, artık uygulamamızı incelemek için hazır durumdayız. Bu noktada Extension’lardan bahsetmemiz gerekiyor. Çünkü extension’lar dump dosyası içerisinden anlamlı bilgi çıkarabilmek için bize yardımcı olan debugger eklentileridir.

Bir .Net uygulamasını debug edebilmek için bir süre öncesine kadar kullanabileceğimiz extension SOS extension’ı  idi. Bu Extension .net Framework ile birlikte geliyor ve temel nesne ve mantık yapılarının incelenmesi için kullanılıyordu. Fakat 2011 itibari ile Framework 2.0 üzeri uygulamalar için artık Psscor Extension’larını da kullanabiliyoruz. Psscor extension’ı, SOS fonksiyonları ile birlikte ilave fonksiyonlar da içeriyor.

Blog’umuzda temelde Psscor Extension’larını kullanıyor olacağız.

Framework versiyonuna göre uygun 'extension'ı aşağıdaki linklerden indirebilirsiniz.

Framework 2.0 / 3.5 için Psscor2  ve Framework 4 için Psscor4:

Uygulamanızın çalıştığı mimariye gore (32 / 64 bit) bu extensionlardan uygun olanının yüklenmesi gerekiyor. Örneğin 64 bit’de çalışan bir uygulamanın dump’ını aldınız, Windbg.exe’de bu dosyayı açtınız ve sembol ayarlarını yaptınız, bundan sonra uygulamanın çalıştığı framework versiyonuna gore debugger’dan aşağıdaki komutu çalıştırarak extension’ı yüklüyoruz. (Extension dll’ini, Windbg.exe ‘nin çalıştığı klasöre kopyalayabilirsiniz):

 0:000> .load psscor2

Aşağıdaki komutla ise extension’ın yüklenip yüklenmediğini görebiliriz (Burada ‘Extension DLL search Path’ _NT_DEBUGGER_EXTENSION_PATH Environment Variable dan alınmaktadır.):

0:000> .chain

Extension DLL search Path:

   C:\debuggers\x86\...

Extension
DLL chain:   

psscor2: image
2.0.50826.0, API 1.0.0, built Wed Oct 29 20:48:12 2008

      [path: C:\debuggers\x86\psscor2.dll]

   dbghelp: image 6.13.0000.699, API 6.1.6, built Fri Mar 05 03:39:51 2010

Artık .Net uygulamamızı debug etmeye hazırız.  İlk olarak Extension’ın sağladığı komutlar ile ilgili olarak help dosyasını görmek isteyebilirsiniz:

 

 0:000> !psscor2.help

-------------------------------------------------------------------------------

SOS
is a debugger extension DLL designed to aid in the debugging of managed

...

... 

DumpObj
(do)                      
Threads

DumpArray
(da)                    
CLRStack

 Sonrasında istediğiniz herhangi bir komutun kullanımını aşağıdaki şekilde görebilirsiniz:

0:000> !psscor2.help dumpheap

-------------------------------------------------------------------------------

!DumpHeap
[-stat]

          [-strings]

... 

 

Bir sonraki blog'umda sıklıkla kullanılan Psscor komutlarını inceliyor olacağız.

İyi eğlenceler :)

Mert Öztürk