Crash Mode, 1st/2nd chance exception, mini/full


Merhaba,
Artık dump alma ile ilgili temel adımlara alıştığınızı umuyorum. Bu kez exception oluşturan uygulamaların dump’larının nasıl alınabileceğine değineceğim. "Dump Alma ( Hang Mode - I )" makalesindeki UITest.exe’yi kullanacağız. Uygulamayı çalıştıralım ve “AccessViolation” butonuna basalım. İşletim sistemi, versiyonuna bağlı olarak bir takım kurtarma girişimlerinde bulunabilir, size seçenekler sunabilir. Ama, sonuçta uygulama kapanacaktır :

 

 

1st/2nd Chance Exception

 

Olanları şöyle özetleyebiliriz :

 

#1 Exception throw edilir ve İşletim Sistemi uygulamaya exception’ı handle edip edemeyeceğini sorar. Bu durumu “1st chance exception” olarak da adlandırıyoruz. Eğer uygulamaya bir debugger bağlı ise o zaman debugger bir dump alabilir. Eğer debugger adplus ile çalıştırılmışsa cdb.exe, bir minidump (aşağıda anlatacağım) dosyası üretir. Exception durumlarında debugger’ların ne yapabileceklerini özelleştirebilirsiniz. Dolayısıyla, debugger istediğiniz başka bir eylemi de gerçekleştirebilir. Örneğin, aslında adplus, cdb.exe’nin sadece minidump oluşturmasını değil aynı zamanda log dosyasına da exception’la ilgili bilgiler yazmasını sağlar.

 

#2 Uygulama exception’ı handle edebiliyorsa kontrol uygulamada kalır ve uygulamaya çalışmaya devam eder.

 

#3 Eğer uygulama exception’ı handle edemezse o zaman işletim sistemi uygulamayı kapatmaya karar verir. Bu duruma da “2nd chance exception” denir. Aynı şekilde, eğer bir debugger uygulamaya bağlı ise debugger istenen eylemi gerçekleştirecektir. Örneğin, adplus ile çalıştırılmış cdb.exe bu durumda bir fulldump dosyası üretecektir. Sonra da uygulama kapanır. Aslında, bu aşamada bir dump daha yazılır. O da “1st chance process shutdown” exception’ından kaynaklanan dumptır.

 

Adım adım crash dump alma

#1 UITest.exe uygulamasını çalıştırın.

#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 -crash -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 -crash -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: 4376)

 

#5 Taskbar’da minimized olarak cdb.exe’nin çalışmaya başladığını göreceksiniz. Hatırlarsanız hang mod dump alırken bu uygulama kısa bir süre gözüküyordu sonra da kapanıyordu. Artık uygulama kapanana kadar cdb.exe de açık kalacak. Cdb.exe’yi maximize ederseniz aşağıdaki gibi yazıların olduğu bir komut satırı göreceksiniz :

 

mps\Crash_Mode__Date_05-12-2010__Time_15-26-0505; GN" isc

0:001> sxe -c @".echo ---;.echo --- 1st chance Stack_buffer_overflow exception -

---;.echo ---------------------------------------------------------------;.echo;

.echo Occurrence happened at: ;.time;.echo;.echo Faulting stack below ---;~#kvn2

50;.echo;.dump -u /mdi /c 1st_chance_Stack_buffer_overflow_exception_in_UITEST.E

XE_running_on_FHBEFES c:\dumps\Crash_Mode__Date_05-12-2010__Time_15-26-0505\PID-

4376__UITEST.EXE__1st_chance_Stack_buffer_overflow__mini.dmp; GN" -c2 @".echo --

-;.echo --- 2nd chance Stack_buffer_overflow exception ----;.echo --------------

-------------------------------------------------;.echo;.echo Occurrence happene

d at: ;.time;.echo;.echo Faulting stack below ---;~#kvn250;.echo;.dump -u /ma /c

 2nd_chance_Stack_buffer_overflow_exception_in_UITEST.EXE_running_on_FHBEFES c:\

dumps\Crash_Mode__Date_05-12-2010__Time_15-26-0505\PID-4376__UITEST.EXE__2nd_cha

nce_Stack_buffer_overflow__full.dmp;!elog_str ADPlus detected a 2nd chance Stack

_buffer_overflow exception in process UITEST.EXE and has taken the following act

ions at the time of the crash: Log Time Stack FullDump EventLog. The output dire

ctory is c:\dumps\Crash_Mode__Date_05-12-2010__Time_15-26-0505; GN" sbo

0:001> *

0:001> * ADPlus is monitoring: UITEST.EXE

0:001> * for  1st chance and 2nd chance exceptions as configured above.

0:001> * To change ADPlus configuration please refer to ADPlus.Doc. This file ca

n be found

0:001> * in the same folder as ADPlus.vbs

0:001> *

0:001> g

  

#6 Şimdi “AccessViolation” butonuna basın. Cdb.exe ve UITest.exe uygulamalarının kapanmasını bekleyin.

 

#7 c:\dumps dizinine bakın. İçinde adı “Crash_Mode__Date_05-12-2010__Time_15-26-0505” e benzer bir dizin oluştuğunu göreceksiniz. Bu dizinlerin debugger tarafından açıldığını biliyoruz. Hang mod dump alırken de benzer formatlı isimlerin olduğu dizinlerin yaratıldığını görmüştük. Şimdi bu dizinin içine bakalım. Aynı tipte log dosyalarının olduğunu göreceksiniz. Ancak hang moddan farklı olarak 3 tane “dmp” uzantılı dosya olduğunu göreceksiniz.

 

PID-4376__UITEST.EXE__1st_chance_AccessViolation__mini_1760_2010-05-12_15-31-56-867_1118.dmp

PID-4376__UITEST.EXE__2nd_chance_AccessViolation__full_1760_2010-05-12_15-31-57-101_1118.dmp

PID-4376__UITEST.EXE__1st_chance_Process_Shut_Down__full_1760_2010-05-12_15-32-06-054_1118.dmp

 

İsimlere dikkat ederseniz, “1st chance” “2nd chance” ve “full”/”mini” sözcüklerinin kullanıldığını göreceksiniz. 1st/2nd chance’ten sonra exception’nın tipi de yazılacaktır. Bizim örneğimiz “AccessViolation” exception’ı olduğu için “_AccessViolation_” sözcüğü eklenmiş.

Meraklısına not : Henüz dmp dosyalarını incelemeye başlamadık. Ancak, nelerle uğraşacağımızı merak ediyorsanız “PID-XXXX__UITEST.EXE__Date_MM-DD-YYYY__Time_HH-MM-SEC.log” dosyasını inceleyebilirsiniz.

 

 

Exception üreten ancak kapanmayan uygulamalar

Aslında neredeyse tüm uygulamalar bu sınıfa girer çünkü; büyük olasılıkla çalıştıkları s��re zarfında bir exception’la karşılaşabilirler. Exception handle edilebiliyorsa sorun yok. Uygulama çalışmaya devam eder. Duruma göre throw edilen bu exception’nın önemi olabilir ve biz de bu anda bir dump almak isteyebiliriz.

Bir deneme yapmak için yukarıdaki tüm adımları tekrarlayın. Sadece 6. adımda “AccessViolation Handled” butonuna basın. Sadece bir “1st chance access violation” minidump dosyası oluştuğunu göreceksiniz.

 

Minidump/FullDump dosyaları

Fulldump : Uygulamanın kullandığı tüm sanal bellek alanı, yüklenmiş tüm modülleri, handle tablosunu içerir.

Minidump : Bu kadar çok bilgiyi içermez, sadece threadlerin callstack’lerini ve yüklenmiş modüllerle ilgili bir takım bilgileri barındırır.

 

 

Hoşçakalın

-faik

Comments (0)

Skip to main content