Ders 6: Hata Denetimi
  • Hata denetimini ve araçlarını açıklamak.

I. Hata Denetimi

Hata denetimi (troubleshooting) programda oluşan çalışma zamanı ve diğer kodlama hatalarının tanımlanması (teşhis) ve giderilmesi için yapılan çalışmalardır.

Visual Basic, programların yazılması (derlenmesi ve çalıştırılması) sırasında karşılaşılan hatalara karşı geliştirilmiş bir hata bulma ve düzeltme (debugging) olanağına sahiptir.

Programın çalıştırılması sırasında kendisinden kaynaklanan bir hata varsa, hata bildirilir. Bunun dışında çalışma zamanı hataları ise, programın çalışması sırasında beklenmeyen bir durum sonucu oluşur. Örneğin okunacak dosyanın olmaması gibi. Bu durumda program hata verir. İşte bu durumlara karşı alınan önlemlere hata denetimi denir.

A. Çalışma Zamanı Hatalarının Kontrolü

Çalışma zamanı hataları (run-time errors) programın çalışması sırasında oluşan hatalardır. Program hazırlanmış ve kullanıcıya sunulmuştur.

Çalışma zamanı (run-time) hatalarına karşı herhangi bir önlem alınmazsa program hata verir ve kesilir. Diğer bir açıdan; bu durum kullanıcılar karşısında düşülebilecek en kötü durumlardan birisidir. Bu nedenle çalışma zamanı hatalarına karşı belli önlemler daha önceden alınmalıdır.

Bu hatalar 1-1000 arasında hata kodu döndürürler. Bu hata kodları On Error deyimi ve Err nesnesi ile birlikte ele alınarak hataların değerlendirilmesi ve programın uygun biçimde yönlendirilmesi sağlanır.

Tablo: Kontrol edilebilir bazı hatalar

Kod  Mesaj
3 Return without GoSub (GoSub'sız Return)
5 Invalid procedure call (geçersiz procedure çağırması)
6 Overflow (taşma)
7 Out of memory (bellek yetersiz)
9 Subscript out of range (dizi dışı)
10 This array is fixed or temporarily locked (dizi sabit ya da kilitli)
11 Division by zero (sıfıra bölme)
13 Type mismatch (tip uyumsuzluğu)
14 Out of string space (string alanı yetersiz)
16 Expression too complex (ifade çok karışık)
17 Can't perform requested operation (işlem işletilemiyor)
18 User interrupt occurred (kullanıcı kesmesi oluştu)
20 Resume without error (hatasız devam)
28 Out of stack space (yetersiz stack alanı)
35 Sub, Function, or Property not defined (… tanımlanmamış)
47 Too many DLL application clients (çok sayıda DLL uygulama)
48 Error in loading DLL (DLL yüklemede hata)
49 Bad DLL calling convention (DLL hatası)
51 Internal error (iç hata)
52 Bad file name or number (yanlış dosya)
53 File not found (dosya bulunamadı)
54 Bad file mode (kötü dosya biçimi)
55 File already open (dosya zaten açık)
58 File already exists (dosya zaten var)
59 Bad record length (kötü kayıt uzunluğu)
61 Disk full (disk dolu)
62 Input past end of file (dosya sonunu geçme)
63 Bad record number (kötü kayıt numarası)
67 Too many files (çok fazla dosya)
68 Device unavailable (aygıt kullanılamaz durumda)
70 Permission denied (izin yok)
71 Disk not ready (disk hazır değil)
74 Can't rename with different drive (başka bir sürücü adıyla değiştirilemez)
75 Path/File access error (dosya adı hatası)
76 Path not found (yol bulunamadı)
91 Object variable or With block variable not set (nesne değişkeni düzenlenmemiş)
92 For loop not initialized (döngü başlatılmamış)
93 Invalid pattern string (yanlış string düzeni)
94 Invalid use of Null (Null yanlış kullanılmış) .... ....................


B. On Error Deyimi

Hata oluşumunda; mesaj vermek ve programın kontrolünü sağlamak için belli bir program parçasının işletilmesini sağlanabilir. Bu işlem için hata kontrolüyle ilgili olarak bir program bloğunun yazılmasını sağlanır.

Yapısı:

On Error GoTo satır
On Error Resume Next
On Error GoTo 0

On Error deyiminin parametreleri şunlardır:
 
Parametre Açıklama
Go To 0 Procedure'daki hata kontrolünü iptal eder.
GoTo satır / etiket Hata kontrolü satırının belirtilen satırdan ya da etiketten başlatılmasını sağlar.
Resume Next Hatanın ardından programın bir sonraki deyimi işleyerek programı çalıştırmayı sürdürmesini sağlar.

Eğer programcı, programında bir On Error deyimi kullanmaz ve olası hataları kontrol altına almazsa; hata oluştuğunda program çalışma zamanı içinde hatayı verir ve kesilir.

Program içinde bir hata denetimi yapılırsa; hata oluştuğu anda program kontrolü, hata kontrolü kısmına atlar. Hata denetimi; Resume, Exit Sub ya da Exit komutuna kadar aktif kalır. Hata denetiminin ardından hatanın tanımlanması için Err nesnesinin Number özelliği kullanılır.

Örnek : Sıfıra bölünme hatalarına karşı tuzak

Aşağıdaki örnekte OnError ile 11 (Division by Zero) hatası kontrol edilmektedir:

Sub Button32_Click ()
On Error GoTo HataKontrol
A = 5
B = 0
Sunuc = A / B
Exit Sub 'burada programa son verilir.

HataKontrol:
Select Case Err.Number
Case 11: Mesaj = "Sıfıra bölünme hatası oluştu!!!"
End Select
MsgBox Mesaj
Resume Next
End Sub

NOT: Bu dokümanlar Faruk Çubukçu tarafından hazırlanmıştır. Ticari amaçlı olarak kullanılmaz. Daha fazla bilgi için www.farukcubukcu.com adresine bakınız.

II. Hata Düzeltme Araçları

Bir Visual Basic programı geliştirirken ya da programın çalışması sırasında bir hata ile kesilmesinden sonra hatanın bulunması ve giderilmesi için belli araçlar kullanılır. Bunların başında Debug (Hata Giderme) araç çubuğu gelir:

Şekil: Debug araç çubuğu



Debug araç çubuğunun kullanılması için programın kesilmesi gerekir. Kesme (break) işlemi hata sonucunda ya da manuel olarak da yapılabilir:

Şekil: Break düğmesi

Programın kesilmesi ya da Break düğmesine tıklanarak program debug moda alınır. İşte bu durumda programcı Visual Basic hata giderme araçlarını kullanır.

A. Kesme Noktası (Toggle Breakpoint)

Programın bir yerine gelip durmasını istiyorsunuz. Ve o aşamada değerleri kontrol edeceksiniz. İşte bu olanağı size kesme noktası sağlar.

Kod içinde kesme noktası ile işaretlenen satır işletilmeden önce program durur. Kesme noktası genellikle programı belli bir yerde durdurup o aşamada bazı değişkenlerin değerlerinin kontrol edilmesini sağlar.

Bu işlem için araç çubuğundaki Toogle BreakPoint düğmesi kullanılır. Tekran tıklanarak kesme noktası kaldırılır.

B. Bilgi Pencereleri (Locals Window, Immediate Window ve Watch Window)

Program kesildikten sonra; Procedure içinde bir değişkenin ya da bir ifadenin seçilerek değerinin ne olduğuna bakılmak istenirse o zaman anlık izleme penceresi (instant watch) kullanılır.

Locals Window

Program kesildiğinde bulunulan procedure içinde tanımlanan bütün değişkenlerin değerini verir:

Expression sütünunda değişkenlerin adları listelenir. Bütün class modüllerinde buradaki ilk değer <Me> değeridir. Bu değerin üzerine tıklanarak genişletilir. Value sütünunda ise değişkenin değeri görünür. Bu değerin üzerinde çift tıklanarak değişiklik yapılabilir.

Immediate Window

Program kesildikten sonra; procedure içinde bir değişkenin ya da bir ifadenin seçilerek değerinin ne olduğuna bakılmak istenirse o zaman anlık izleme penceresi kullanılır.

Anlık izleme penceresinde değişkenlerin ya da ifadelerin değerlerini göstermek için (Print) deyimi ya da ? kullanılır. Ayrıca istenirse kod satırından Immediate Window ekranına sürükleme yapılır.

Örnek:

? toplam

Gözden Geçirme

1. Programınızda daha az hata ile karşılaşmak için neler yaparsınız?
2. Çalışma zamanı hatalarına karşı neler yapılır? Açıklayın.
3. Resume deyiminin görevi ve parametreleri nelerdir?
4. Err nesnesinin görevi ve metotları nelerdir?

Site Meter

www.KESDi.com©