Visual Basic'de istisnaların işlenmesi için Try...Catch...Finally bloğu kullanılır. İstisnayı yakaladıktan sonra yeniden fırlatmak, yani çağrı yığınında (Call Stack) daha ileriye taşımak için Throw veya Throw ex operatörü kullanılır.
Farklılıklar:
Throw (parametresiz) mevcut istisnayı yeniden fırlatır ve orijinal çağrı yığınını (Call Stack) korur.Throw ex, istisna nesnesini fırlatır, ancak çağrı yığınını sıfırlar — sorunun gerçek ortaya çıktığı yer hakkında bilgi kaybolur.İstisna değiştirilmediyse doğru bir yeniden fırlatma için parametresiz Throw kullanılması önerilir.
Doğru yeniden fırlatma örneği:
Try DangerousOperation() Catch ex As Exception ' Loglama... Throw ' çağrı yığını korunur End Try
Yanlış yöntem:
Try DangerousOperation() Catch ex As Exception Throw ex ' Çağrı yığını sıfırlandı, tanılama zorlaştı End Try
Throw ex yerine Throw kullanırsanız çağrı yığınında ne olur?
Parametresiz
Throwkullanıldığında orijinal çağrı yığını korunur — istisnanın meydana geldiği yer. EğerThrow exkullanırsanız, yığın mevcut satırdan başlar ve orijinal yer kaybolur. Bu da hata ayıklamayı zorlaştırır çünkü hatanın hangi kod bölümünde ortaya çıktığını göremezsiniz.
Hikaye
Büyük bir banka projesinde geliştiriciler mantık hatalarını fırlatmak için
Throw exkullandılar. Logların incelenmesi sırasında, istisnaların ortaya çıktığı yeri belirlemek imkansız hale geldi çünkü doğru izleme yoktu.
Hikaye
Veri erişim katmanında SqlException fırlatmak için
Throwkullanıldı, ancak bazı durumlarda otomatik kod formatlama aracı bunuThrow exile değiştirdi. Bu, loglardan veri otomatik çıkarım sistemini bozdu ve olaylara yanıt verme süresini artırdı.
Hikaye
Exception nesnesini değiştirmeye çalışmak ve onu parametresiz
Throwile fırlatmak, loglarda değişikliklerin yansımamasına neden oldu — yalnızca orijinal nesneyi InnerException olarak koruyarak yeni bir istisna nesnesi oluşturmak işe yaradı.