Exception disabling ?

C, C++ ve C++ Builder ile ilgili konuları buraya yazabilirsiniz.
Cevapla
swordholder
Üye
Mesajlar: 39
Kayıt: 15 Eki 2006 10:58

Exception disabling ?

Mesaj gönderen swordholder »

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
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3077
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Mesaj gönderen sabanakman »

Aslında bu işlem için try-except ve try-finally blokları var. C++ yazım şeklini bilmiyorum ama delphide:

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;
ş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.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
swordholder
Üye
Mesajlar: 39
Kayıt: 15 Eki 2006 10:58

Mesaj gönderen swordholder »

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.
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3077
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Mesaj gönderen sabanakman »

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. - .
Kullanıcı avatarı
lazio
Moderator
Mesajlar: 1526
Kayıt: 11 Tem 2003 04:55
Konum: İstanbul

Mesaj gönderen lazio »

@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..
Resim

..::|YeşilMavi|::..
swordholder
Üye
Mesajlar: 39
Kayıt: 15 Eki 2006 10:58

Mesaj gönderen swordholder »

Programimi calistirdigimda windows belli bir durumda hata veriyo
"Unhandled exception raised" diye yani handle yapilmayan exception cikti
bu benim try bloklarim degil builderin kendi alt duzeydeki kodlarinda bununla nasil mucadele edebilecem??? Onceden tesekkurler
[/b]
Kullanıcı avatarı
Opt2000
Üye
Mesajlar: 216
Kayıt: 09 Tem 2003 10:04

Mesaj gönderen Opt2000 »

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ç
swordholder
Üye
Mesajlar: 39
Kayıt: 15 Eki 2006 10:58

Mesaj gönderen swordholder »

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?
swordholder
Üye
Mesajlar: 39
Kayıt: 15 Eki 2006 10:58

Mesaj gönderen swordholder »

Bi de Code Guard hakkinda da beni bilgilendirir misiniz acaba???
Kullanıcı avatarı
Opt2000
Üye
Mesajlar: 216
Kayıt: 09 Tem 2003 10:04

Mesaj gönderen Opt2000 »

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ç
swordholder
Üye
Mesajlar: 39
Kayıt: 15 Eki 2006 10:58

Mesaj gönderen swordholder »

Allah razi olsun Hepinizden
Cevapla