Exception disabling ?
-
- Üye
- Mesajlar: 39
- Kayıt: 15 Eki 2006 10:58
Exception disabling ?
Sevgili arkadaslar C++ Builderde Exception durumlarini iptal etmek mumkun mu ki Calisan (.exe) program hic bir exception atmasin. Mesela Delphide input/output exception leri iptal etmek icin {$I-} yaziyoruz ama C++ Builderde TUM exceptionleri kapatmak (disable) yapmak mumkunmu acaba yardimlariniz icin onceden tesekkurler
- sabanakman
- Kıdemli Üye
- Mesajlar: 3081
- Kayıt: 17 Nis 2006 08:11
- Konum: Ah bi Antalya olaydı keşke (Ankara)
Aslında bu işlem için try-except ve try-finally blokları var. C++ yazım şeklini bilmiyorum ama delphide:
şeklinde kullanılır. Eğer yanlış hatırlamıyorsam herhalde C yazım kuralı da __try __except ve __try __finally şeklindeydi. Eğer elinde kaynak yoksa bile çevrim içi yardımdan bilgi alabilirsin. Kolay gelsin.
Kod: Tümünü seç
try
.
.
.
except
{Burası sadece hata çıktığı anda çalışır ve hatanın altından buraya kadar olan bölüm atlanır}
end;
Kod: Tümünü seç
try
.
.
.
finally
{Burası hata çıksada çıkmasada çalışır ve hata oluşursa hatanın altından buraya kadar olan bölüm atlanır}
end;
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
_________________
Derin olan kuyu değil kısa olan iptir. - .
-
- Üye
- Mesajlar: 39
- Kayıt: 15 Eki 2006 10:58
Tesekkur ederim cevabiniz icin. Allah razi olsun.
Ama sormak istedigim benim yazdigim try bloklarinin attigi exceptionlar degil, isletim sisteminin benim programim calisiyorken(benim programimdaki hatalardan dolayi) attigi exceptionlar. Boylece acaba mumkun mudur ki isletim sisteminin attigi (onceden belirlenmis,standart) exceptionlari susturmak. Onceden tesekkur ederim.
Ama sormak istedigim benim yazdigim try bloklarinin attigi exceptionlar degil, isletim sisteminin benim programim calisiyorken(benim programimdaki hatalardan dolayi) attigi exceptionlar. Boylece acaba mumkun mudur ki isletim sisteminin attigi (onceden belirlenmis,standart) exceptionlari susturmak. Onceden tesekkur ederim.
- sabanakman
- Kıdemli Üye
- Mesajlar: 3081
- Kayıt: 17 Nis 2006 08:11
- Konum: Ah bi Antalya olaydı keşke (Ankara)
Hiç bu metotları denedin mi? Exception dediğin ister kendin üret, ister makine üretsin isterse de işletim sistemi üretsin farketmez exception'dır. Ben yazmaya karşı korumalı bir diske yazmaya çalışırken bu kodlar tarif ettiğim şekilde çalışıyordu. Sende bilirsinki dosya yazılamaması hatası (exception) bir işletim sistemi hatasıdır. Bunun delphi dışındaki dillerde de farklı olmadığını (özellikle C dillerinde) düşünüyorum.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
_________________
Derin olan kuyu değil kısa olan iptir. - .
@sabanakman ın da dediği gibi bu exception ları try {} catch {} ile yakalayabilirsin. Zaten bu blok lar exception ları yakalayıp neticesinde birşeyler yapmak yada yapmamak için var.. sen hatanın olabileceği kodu try {} bloğu içine yazdıktan sonra eğer bir exception fırlatılıtsa bunu yakalamış olursun, bu exception karşılığında hiç bir şey yapmak istemiyorsan catch{} i boş geçebilirsin, yok ben bu exception ı özelleştireceğim dersen bu bloğa kendi kodlarını yazarak programı yönlendireceksin..
-
- Üye
- Mesajlar: 39
- Kayıt: 15 Eki 2006 10:58
Selam,
Builder'in kodlarında hata olma olasılığı gerçekten de çok düşük, çünkü bu kodlar çok iyi hazırlanmış ve defalarca da kontrol edilmiş kodlar. Büyük ihtimalle sorun senin yazdığın bir kısım çıkıyor, ama eğer yazdığın kod biraz kompleks ise o zaman debugger hatanın tam olarak nerede çıktığını tespit edemeyebilir. Özellikle thread içeren programlardaki bellek hatalarını tespit etmek gerçekten de zordur.
Sana tavsiyem, öncelikle Code Guard'ı etkinleştirmen. Code Guard hem bellek kayıplarını tespit etmeni, hem de bir hata oluştuğu zaman trace etmeni kolaylaştıracaktır.
Bunun dışında şöyle bir tavsiyede de bulunabilirim. Compiler directivelerini kullanarak kodun içine OutputDebugString (veya benzeri) logging özelliği eklemen. Özellikle büyük projelerde çok faydalı olacaktır. Örneğin
#ifdef DEBUG
OutputDebugString("log");
#endif
Proje bittikten sonra DEBUG directive'ini sildiğin zaman (ki Project Options'dan Release yaptığın zaman silinecektir) bunların hiçbirisi koda eklenmeyecektir.
Kolay gelsin,
Bahadır Alkaç
Builder'in kodlarında hata olma olasılığı gerçekten de çok düşük, çünkü bu kodlar çok iyi hazırlanmış ve defalarca da kontrol edilmiş kodlar. Büyük ihtimalle sorun senin yazdığın bir kısım çıkıyor, ama eğer yazdığın kod biraz kompleks ise o zaman debugger hatanın tam olarak nerede çıktığını tespit edemeyebilir. Özellikle thread içeren programlardaki bellek hatalarını tespit etmek gerçekten de zordur.
Sana tavsiyem, öncelikle Code Guard'ı etkinleştirmen. Code Guard hem bellek kayıplarını tespit etmeni, hem de bir hata oluştuğu zaman trace etmeni kolaylaştıracaktır.
Bunun dışında şöyle bir tavsiyede de bulunabilirim. Compiler directivelerini kullanarak kodun içine OutputDebugString (veya benzeri) logging özelliği eklemen. Özellikle büyük projelerde çok faydalı olacaktır. Örneğin
#ifdef DEBUG
OutputDebugString("log");
#endif
Proje bittikten sonra DEBUG directive'ini sildiğin zaman (ki Project Options'dan Release yaptığın zaman silinecektir) bunların hiçbirisi koda eklenmeyecektir.
Kolay gelsin,
Bahadır Alkaç
-
- Üye
- Mesajlar: 39
- Kayıt: 15 Eki 2006 10:58
Cok dogru dediniz, Builderin alt duzey yazitlarinda hatalarin olma ihtimali cok dusuk ama ne yazik ki Builderin hepsi Borland tarafindan yazilmis degil. Demek istedigim ben programimda bir component kullaniyorum TChart componenti grafleri gostermek icin, bu komponent borland tarafindan yazilmis degil bildigim kadariyla bu komponenti baska birileri yazmis. Bundan dolayidir ki tchart i kullandigimdan sonra programi kapattigimdan sonra Windows bana "An unhandled exception raised" diyo. Ve log lar hakkinda daha detayli bilgiyi nerden alabilecegim konusunda bana yardimci olabilirmisiniz?
-
- Üye
- Mesajlar: 39
- Kayıt: 15 Eki 2006 10:58
Code Guard'ı kullanması basit.
Öncelikle Tools->Code Guard menüsünü seç ve pencerede Enable seçeneğini işaretle. Daha sonra da Project->Options'dan Code Guard sekmesine geç ve Code Guard Validation seçeneğini işaretle. Bütün alt seçenekler de seçili olsun. Daha sonra programını tekrar compile et (Debug modunda) ve çalıştır. Hatalı yerlerde Code Guard programı durduracak ve sana bilgi verecektir. İlk zamanlar kullanırken zorlanabilirsin, ama biraz alıştıktan sonra çok daha rahat edeceksin.
TChart bileşeninde de bu kadar büyük bir hata olacağını sanmıyorum. Belki Builder'ın yamalarını yüklemek ve TChart'ın son sürümüne upgrade etmek işine yarayabilir.
Kolay gelsin,
Bahadır Alkaç
Öncelikle Tools->Code Guard menüsünü seç ve pencerede Enable seçeneğini işaretle. Daha sonra da Project->Options'dan Code Guard sekmesine geç ve Code Guard Validation seçeneğini işaretle. Bütün alt seçenekler de seçili olsun. Daha sonra programını tekrar compile et (Debug modunda) ve çalıştır. Hatalı yerlerde Code Guard programı durduracak ve sana bilgi verecektir. İlk zamanlar kullanırken zorlanabilirsin, ama biraz alıştıktan sonra çok daha rahat edeceksin.
TChart bileşeninde de bu kadar büyük bir hata olacağını sanmıyorum. Belki Builder'ın yamalarını yüklemek ve TChart'ın son sürümüne upgrade etmek işine yarayabilir.
Kolay gelsin,
Bahadır Alkaç