Hata yakalama, hata kodlarını öğrenme

tarih28.10.2008 02:37 — Visual Basic,



Hata Yakalama

Program yazarken hata mesajlarını nasıl organize ediyorsunuz? Kullanıcı hata mesajlarından bir şey anlayabiliyor mu? Yada kullanıcı hata mesajı ekranda belirince ne yapacağını biliyor mu?

Burada anlattığım yöntem ile program içinde oluşan hata mesajlarını daha anlaşılır biçime sokabiliriz. Böylece hem kullanıcı hata ile karşılaşınca ne yapacağını bilir, hemde siz hatayı çözerken nereden başlayacığınızı bilirsiniz.

Genel olarak özetleyecek olursak bir VB projesinin, projedeki tüm formların ve formlardaki tüm fonksiyonların bir ismi vardır. Kullanıcı göreceği hata mesajında şöyle bir yapı ile karşılaşır.

vbProjeİsmi.Formunİsmi.Fonksiyonunİsmi

Burada ismi olmayan tek şey kod satırlarıdır. Satırlara isimleri de hatayı ararken biz ekleyeceğiz. Böylece tam bir hata mesajı ekranda belirecek, okunduğunda anlaşılan ve yazılımcıyı yönlendiren bir hata mesajı.

Şimdi yeni proje açıp formun üzerine bir buton koyun. Butonun ismi btnHata olacak. Aşağıdaki kodu formun General Declerations bölümünden itibaren kopyalayın. Kod içindeki yorum satırlarına dikkat edin ve gerekli yerleri isteğinize göre değiştirmeyi unutmayın


Const CLASS_NAME = "frmAdresDefteri" 'formun ismini veriyoruz.

Private Sub btnHata_Click()

On Error GoTo Exit_proc ' Hata durumunda Exit_proc kismina gidecek.

Const METHOD_NAME = CLASS_NAME & ".btnHata_Click" 'Bu fonksiyonun ismini veriyoruz.

'Bu durumda elimizde formun ismi ve ilgili fonksiyonun ismi olmuş oluyor.

'**************************

'Buradan sonra yapmak istediginiz işin kodlari gelecek

ren = 10 / 0

'**************************

Exit_proc:

Call EndProcedure(METHOD_NAME)

End Sub

Şimdi bir module ekleyip aşağıdaki kodu yapıştırın. Bu kod ile hata mesajları daha anlaşılır biçime sokulmaktadır. Eğer istenirse daha da genişletilerek farklı işler yapması sağlanabilir.


Public Sub EndProcedure(sMethod As String, Optional sMessage As String)

Dim sText As String Dim lErrNo As Long Dim sErrSource As String Dim sErrDescription As String Dim lERL As Long If Err.Number <> 0 Then

'Hatanin ayrintilarini kaydediyoruz, Boylece eger MTS kullaniyorsaniz Error nesnesi 'kaybolunca bilgisi elimizde kalir lErrNo = Err.Number sErrSource = Err.Source sErrDescription = Err.Description lERL = Erl sText = App.Title & "." & sMethod 'Uygulamanin basliginida ekleyelim 'Eger baska bilgi varsa onuda ekliyoruz If sMessage <> "" Then sText = sText & sMessage 'Okunmasi kolay bir hale getirelim

sText = "Hata yeri : " & sText & vbCrLf & _ "Hata satiri : " & lERL & vbCrLf & _ "Hata icerigi : " & sErrDescription & vbCrLf & _ "Lutfen falan kisi ile kontak kurunuz." 'Ve hatayi kullaniciya gosterelim Err.Raise lErrNo, sErrSource, vbCrLf & sText End If End Sub

Bu işlemlerden sonra projeyi çalıştırıp butona basın. Ekranda şöyle bir mesaj belirecek.

Runtime-Error '11': Hata Yeri : .

 

.btnHata_Click Hata satiri : 0 Hata Icerigi : Division by zero Lutfen falan kisi ile kontak kurunuz.

Bu hata kullanıcı tarafından size bildirildikten sonra hatanın hangi formda ve hangi fonksiyonda olduğunu bileceksiniz. Eğer butonun fonksiyonunu aşağıdaki gibi değiştirirsek hatanın olduğu satırıda bilmiş olacağız.

 


Private Sub btnHata_Click()

On Error GoTo Exit_proc ' Hata durumunda Exit_proc kismina gidecek.

Const METHOD_NAME = CLASS_NAME & ".btnHata_Click" 'Bu fonksiyonun ismini veriyoruz.

'Bu durumda elimizde formun ismi ve ilgili fonksiyonun ismi olmus oluyor.

'**************************

'Buradan sonra yapmak istediginiz isin kodlari gelecek

10:

20: ren = 10 / 0 'hata olabilecek satirlari markaliyoruz

'Onceden markalamaya gerek yok fakat hata durumunda markalayarak hatayi arayabiliriz.

30:

'**************************

Exit_proc:

Call EndProcedure(METHOD_NAME)

End Sub

Hata mesajı şu şekilde ekranda belirecektir.
Runtime-Error '11':
Hata Yeri : .

.btnHata_Click
Hata satiri : 10
Hata Icerigi : Division by zero
Lutfen falan kisi ile kontak kurunuz

Bu mesajdan sonra yazılım uzmanlarınızdan hangisi sıfıra bölme işlemi için o kodu oraya yazdıysa tek ayak üstünde bir saat bekleme cezası almalıdır.

EndProcedure fonksiyonu içinde istersek hatayı veritabanında bir tabloya bile kaydedebiliriz. Bu tamamı ile size kalmış. Eğer tam bir hata kontrolü istiyorsanız MS SQL Server üzerinde hazırlayacağınız bir "stored procedure" ve değişimlerde e-posta atma özelliğini kullanarak hatanın size direk ulaşmasını da sağlayabilirsiniz.

 




Bir önceki konu başlığımıza göz atmak isterseniz tıklayınız : Dosya Yazma okuma Output Input Append Random Binary





Yorum Yazın