Dump Alma ( Hang Mode – II )


Merhaba,

Geçen sefer yanıt vermeyen ve işlemci zamanını az kullanan uygulamadan nasıl dump alınacağına değinmiştim. Bu kez yanıt vermeyen ancak işlemci zamanını çok kullanan bir uygulamadan nasıl dump alınabileceğini anlatacağım.

İlk yazımda belirttiğim gibi uygulama yanıt vermez durumu gelince yapmamız gereken ne kadar işlemci zamanı kullandığına göz atmak olmalı. Geçen yazıda yayınladığım UITest.exe uygulamasını açın ve “Yüksek İşlemci” butonuna basın.

Sonra, UITest.exe uygulamasını tutup çekmeye çalışın. Bir kez daha UITest.exe’nin başlığına “Not Responding” açıklamasının eklendiğini göreceğiz.

Görev Yöneticisini açın ve “Processes (işlemler)” sekmesinden “UITest.exe” uygulamasını bulun ve CPU kolonundaki değeri kontrol edin. Görmenizi beklediğim değer en az 100 / İşlemciSayısı dır.

Örneğin, bir işlemciniz varsa 100, ikiyse 50, gibi. İleride dump analizini tartıştığımızda nedenlerini daha ayrıntılı göreceğiz.

 

UITest.exe uygulamasını sonlandırmadığınız sürece bu seviyedeki işlemci kullanımı devam edecektir. Bu tip durumlarda uyguladığımız bir yöntem var : Birden fazla defa hang mode dump almak. Bu yöntemin arkasında yatan düşünce alınan dump dosyalarını karşılaştırıp hangi fonksiyonun bu soruna neden olduğunu görebilmek. Bu yöntemin başarısı, işlemci kullanımının yüksek olduğu süre ve alınan dump sayısı ile bağlantılıdır. Eğer işlemci kullanımı -UITest.exe örneğinde olduğu gibi- uygulama kapanana kadar yüksek devam ediyorsa bu durumda peşpeşe alınacak 4 dump yararlı olacaktır. Çünkü; genellikle sebep sonsuz döngüdür. Dumplarda callstack’lerin ortak fonksiyonlarını inceleyeceğiz. Öte yandan, yanıt vermeme durumu belli bir süre devam ediyorsa ve sonra uygulama normal çalışmasına devam ediyorsa bu yönetimin başarı şansı düşecektir. Çünkü; bu tip yüksek işlemci sıçramalarının sebebi çoğunlukla artan istek sayısıdır. Bu durumda alacağımız dumplar arasında ortak callstack’ler bulamayabiliriz bile.

 Şimdi adımları bir kez birlikte gözden geçirelim :

#1 Uygulamanın tepkisiz ve çok işlemci zamanı kullandığından emin olalım.

#2 Elevated ( Run as Administrator ) bir komut satırı açalım.

#3 “C:\Program Files\Debugging Tools for Windows (x86)” dizinine geçelim.

#4 Aşağıdaki komutu yazıp çalıştıralım :

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

Komut çalışınca aşağıdaki gibi bir yazı görebilirsiniz. “quiet” modda çalıştırdığımız için sembol dizini uyarısı komut satırına yazılıyor. Sonra da debugger’ın uygulamaya başarıyla bağlandığı belirtiliyor.

 

  

C:\Program Files\Debugging Tools for Windows (x86)>Adplus -hang -pn UITest.exe –o c:\dumps -quiet

WARNING!  An ‘_NT_SYMBOL_PATH’ environment variable is not set.

Please check the application event log or the ADPlus-report.txt for more details.

 

Attaching the debugger to: UITEST.EXE

                               (Process ID: 7520)

 

#5 Komutu çalıştırdığınız anda taskbar’da kısa süreliğine “cdb.exe“ adlı bir programın açılıp kapandığını göreceksiniz. Cdb.exe kapandıktan sonra 4. Adımı tekrarlayın. Bu yöntemle 4 kez dump oluşturun.

#6 İşlem bittikten sonra c:\dump dizinine gidin. 4 yeni dizin oluşturulduğunu göreceksiniz. Hatırlarsanız her dizinin içeriğini geçen yazıda gözden geçirmiştik.

 

Gelecek yazımda crash mod dump almaktan bahsedeceğim.

 

Hoşçakalın

-faik

Comments (0)

Skip to main content