Dump Alma ( Hang Mode – I )


Merhaba,
Bu yazımda sorun gösteren bir uygulamanın dump’ının nasıl alınabileceğini göstereceğim. Bu yazının ekinde sıkıştırılmış bir dosya bulacaksınız : UITest.zip. İçinde UITest.exe ve senaryolar.dll adlı iki dosya bulunuyor. UITest.exe uygulamasını kullanarak sorunlu durumları yaratacağız ve geçen yazıda kurduğumuz
“Debugging Tools for Windows” araçlarıyla da dump dosyalarını üreteceğiz.

Örnek uygulamayı çalıştırmak için :

Ekteki dosyayı istediğiniz dizine kopyalayın ve açın. Bu dizinin c:\DebugTest olduğunu farzediyorum. Eğer sisteminizde VC++ 2010 çalışma zamanı kütüphaneleri yoksa aşağıdaki hatayı alacaksınız :

 

 

Hatayı gidermek için VC++ 2010 x86 Çalışma Zamanı Kütüphanelerini ( Runtime Libraries ) kurun. Kurulum dosyalarına aşağıdaki adresten ulaşabilirsiniz :

Microsoft Visual C++ 2010 Redistributable Package (x86)
http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=a7b7a05e-6de6-4d3a-a423-37bf0912db84

İşletim sisteminizin kaç bit olduğu önemli değil. Uygulama 32-bit olduğu için x86 paketini kurmanız yeterli olacaktır. Kurulum tamamlandıktan sonra UITest.exe uygulamasını çalıştırdığınızda aşağıdaki formu göreceksiniz :

 

 

 

Hatırlarsanız, ilk yazımda sorunları 2 ana gruba ayırmıştım ve bu durumlarda ne çeşit dump dosyaları üretilmesi gerektiğini anlatmıştım.

#1 Yanıt Vermeyen uygulamalar : Hang dump

#2 Hata sonucunda kapanan uygulamalar : Crash Dump

 UITest.exe uygulamasını kısaca anlattıktan sonra konuştuklarımızı hayata geçirelim :

# “Deadlock”, “Orphant CriticalSection”, “Yüksek İşlemci” uygulamayı yanıt vermez hale getirecek işlemleri başlatan butonlar.

# “AccessViolation” ve “Stackoverflow” faktöriyel 11 ve yukarısı değerler için uygulamanın kapanmasına yol açar.

# “AccessViolation Handled”, uygulamanın “Access Violation” exception’ını üretmesine yol açar ancak uygulama kapanmaz.

Not : Bu deyimlerin doğru Türkçe karşılıklarını bulamadım. Uygun karşılıklar biliyorsanız bana bildirirseniz sevinirim.

 

 ADPlus.vbs

“C:\Program Files\Debugging Tools for Windows (x86)” dizininde adplus.vbs adlı bir VBScript dosyası bulunmaktadır. Bu script, cdb.exe adlı debugger uygulamasını verdiğimiz parametrelere göre çalıştırır. Dump almak için en sık kullanacağınız araçlardan olacaktır.  
 

Sık kullanacağınız parametreler :

Parametre Açıklama
-p

Process ID’sini verebileceğimiz parametre. PID’yi görev yöneticisinden öğrenebilirsiniz.

Ya da bulunduğunuz dizindeki tlist.exe isimli uygulama da Process ID’lerini  listeler.

-pn

Process Name parametresi. “-p” yerine “-pn”yi kullanabiliriz. Bu durumda uygulamanın

tam ismini vermemiz gerekir. Örneğin, -pn UITest.exe “.exe” uzantısını da kullanmanız gerekmektedir.

-hang Uygulamaya bağlanıp dump dosyasının üretilmesini sağlayıp sonra da kapanan mod.
-crash

Uygulamaya bağlanıp exception oluşmasını bekler. Exception üretildiğinde ise yeni bir dosya

oluşturup dump bilgilerini kaydeder. Uygulama kapanana kadar bu döngü devam eder.

-o Dump dosyalarının nereye yazılacağını belirleyebilirsiniz.
-quiet

adplus scriptini çalıştırdığınızda size 4 uyarı mesajı verebilir.

Bu uyarı mesajlarını almak istemiyorsanız "-quiet" parametresini ekleyin.

 

Bir defada hang ve crash parametrelerinden sadece birini kullanabilirsiniz. "-p" ve "-pn" parametrelerini birlikte ve istediğiniz kadar kullanabilirsiniz. Dolayısıyla bir komutla birden fazla uygulamanın dump'ını aynı anda alabilirsiniz.

Adplus scriptini çalıştırırken “-quiet” parametresini kullanmadıysanız 4 uyarı/bilgi mesajı alabilirsiniz.

Cscript’i default script çalıştırıcısı yapmak isteyip istemediğinizin sorulması :

 

CScript’in varsayılan script çalıştırıcısı olup olmaması tamamen size kalmış bir tercih. Ben herhangi bir değişikliğe neden olmamak için bu adımda “Hayır/No” yu seçiyorum. No’yu seçerseniz gelebilecek uyarı :

 

 

Sembol ( daha sonraki yazılarda değineceğiz ) dizininin tanımsız olduğunu belirten uyarı :

 

 

ve en sonunda adplus’ın başarıyla çalıştığını bildiren mesaj :

 

 

Hang modda dump alma

1. Bir komut satırı açın ve “C:\Program Files\Debugging Tools for Windows (x86)” dizinine geçin.

ÖNEMLİ : Eğer Windows Vista ve sonrası bir işletim sistemi kullanıyorsanız elevated privilege olan bir komut satırı kullanın. Diğer bir bir değişle, komut satırını Administrator olarak çalıştırın.

2. Eğer henüz çalıştırmadıysanız UITest.exe uygulamasını başlatın.

3. “Deadlock” isimli butona basın.

4. 2-3 saniye kadar bekleyin sonra uygulamayı sağa sola çekmeğe çalışın. Başlığa “(Not Responding)” ibaresinin eklendiğini göreceksiniz.

 

 

 

5. c:\ sürücüsünde ( veya size uygun gelen başka bir sürücüde ) yeni bir dizin açın. C:\dumps adlı bir dizin açtığınızı farzediyorum.

6. Komut satırına geri dönün ve aşağıdaki komudu çalıştırın :

Adplus -hang -pn UITest.exe -o c:\dumps -quiet

 

İşlem 1-2 saniye içinde tamamlanacaktır.

7. Dump alma tamamlandıktan sonra UITest.exe’nin kapanmadığını, hala açık olduğunu göreceksiniz. Bu daha önce belirttiğimiz “hang” çalışma biçimidir. İsterseniz Görev Yöneticisi’ndeki ( Task Manager ) process sekmesinden cdb.exe ve cscript.exe olup olmadığını da kontrol edebilirsiniz. Bu da hang mod davranışının gereği. Debugger dump dosyasını ürettikten sonra kapanır.

8. Şimdi c:\dumps dizinine bakalım. ”c:\dumps”ın altına yeni bir dizin yaratıldığını göreceksiniz. Dizin adının şöyle bir formatı olacak : Hang_Mode__Date_AY-GÜN-YIL__Time_Saat-Dakika-SaniyeSalise

Bu dizinin altında bir dizin daha göreceksiniz : CDBScripts. CDBScripts dizini içinde PID-UygulamanınProcessIDsi__UITEST.EXE.cfg adlı bir dosya göreceksiniz. Bu dosya adplus scriptinin çalışmasıyla ilgili bir takım bilgi ve parametreleri içerir. Hang_Mode__Date_AY-GÜN-YIL__Time_Saat-Dakika-SaniyeSalise isim formatındaki bir üst dizine geri dönelim.

Burada 4 tane dosya göreceksiniz. Dosya isimleri sizde tarih,saat ve ProcessID’leri farklı olacağı için aynı olmayacaktır ancak isimlerin formatı aynı kalacak.

Dosya Adı İçeriği
ADPlus_report.txt Bu dosya adplus’ın ürettiği bir takım çalışma zamanı loglarını tutar.
PID-1484__UITEST.EXE__Date_05-10-2010__Time_13-40-3737.log Bu dosyada cdb.exe (debugger’ın) tuttuğu log bilgilerini bulabilirsiniz.
PID-1484__UITEST.EXE__full_1428_2010-05-10_13-40-38-678_05cc.dmp Uygulamaya ait dump dosyası.
Process_List.txt Dump’ın alındığı esnada çalışan diğer uygulamaların listesi. Eğer uygulamamızın başka bir uygulamayı beklediğini düşünürsek o zaman bu liste çok işe yarayacaktır.

 

Artık uygulamanın “yanıt vermez” durumdan çıkamayacağını varsayıyoruz. O yüzden uygulamayı (ALT+F4, Görev Yöneticisinden, vs) sonlandırabiliriz. Dikkat ettiyseniz UITest.exe uygulamasının işlemci kullanımını hiç denetlemedik. İsterseniz UITest.exe’yi tekrar çalıştırın. “Deadlock” ve “Orphant CriticalSection” butonlarına basın ve uygulamanın işlemci kullanımını task manager veya performance monitor’den takip edin. Bakalım ne sonuç bulacaksınız? "Orphant CriticalSection” butonunu denerken yukarıdaki adımları tekrarlayarak UITest.exe uygulamasının dump’ını bir kez daha alın. Gelecek yazımda işlemci zamanı tüketen ve “yanıt vermez” durumdaki uygulamanın dump’ını almaktan bahsedeceğim.

Hoşçakalın
-faik

UITest.zip

Comments (0)

Skip to main content