Rabu, 06 Januari 2016

Galat menangani dalam Visual Basic.

 INFORMASI LEBIH LANJUT
 Visual Basic .NET atau Visual Basic 2005 mendukung dua cara untuk mencegah galat tak terduga untuk mengakhiri aplikasi: penanganan galat terstruktur dan penanganan galat terstruktur. Peristiwa ini adalah galat run-time--juga disebut pengecualian--yang respons biasa atau abnormal kondisi yang disebabkan oleh eksekusi blok kode.

Penanganan galat terstruktur adalah nama yang digunakan dalam Visual Basic .NET atau Visual Basic 2005 merujuk ke kesalahan penanganan metode yang digunakan di Microsoft Visual Basic 6.0. Penanganan galat terstruktur diperkenalkan untuk yang pertama kalinya Visual Basic programmer di .NET dan dilakukan dengan menggunakan mencoba... Menangkap... Akhirnya pernyataan yang telah lama fitur bahasa pemrograman lainnya. Penanganan galat terstruktur memperkenalkan cara sederhana untuk membuat dan mempertahankan program dengan kesalahan yang kuat, komprehensif pegangan.

Meskipun Visual Basic .NET atau Visual Basic 2005 mendukung kedua metode, metode tidak dapat diterapkan secara bersamaan pada prosedur yang sama. Satu-satunya pengecualian ini adalah laporan galat , yang dapat digunakan dalam penanganan galat terstruktur. Disarankan bahwa semua galat penanganan Visual Basic .NET atau Visual Basic 2005 dilakukan dengan penanganan galat terstruktur. Penanganan galat terstruktur dapat menurunkan kinerja aplikasi dan menghasilkan kode yang sulit untuk debug dan memelihara.

Jika galat run-time, kedua metode penanganan galat Cari pengurus kesalahan lokal yang ditetapkan dalam blok kode tertentu. Jika tidak ada handler galat lokal ada, pengecualian disebarkan cadangan tumpukan panggilan sampai handler cocok ditemukan. Tumpukan panggilan mewakili semua prosedur yang pernah dipanggil sebelum titik saat ini eksekusi dan memiliki tidak lagi telah dihentikan. Jika tidak ada handler yang ditemukan di prosedur dalam tumpukan panggilan ketika terjadi kesalahan, aplikasi dihentikan.

Penanganan galat terstruktur

Penanganan galat terstruktur diimplementasikan dengan pernyataan Pada galat , yang ditempatkan di awal blok kode untuk menangani semua kemungkinan pengecualian yang terjadi selama eksekusi kode. Semua penangan galat Visual Basic 6.0 di .NET adalah objek yang dapat diakses menggunakan Microsoft.VisualBasic.Information.Err namespace. Pengendali akan ditetapkan ke tidak ada setiap kali prosedur ini disebut. Anda harus menempatkan hanya ada satu laporan Kesalahan di dalam setiap prosedur, karena pernyataan tambahan menonaktifkan semua pengendali sebelumnya yang ditetapkan dalam prosedur yang.

Laporan kesalahan

Pernyataan Pada galat yang digunakan untuk mengaktifkan rutin penanganan galat, Nonaktifkan kesalahan penanganan rutin, atau menetapkan kode jika terjadi galat cabang di mana.

   On Error { GoTo [ line | 0 | -1 ] | Resume Next }
    
GoTo baris

Digunakan untuk mengaktifkan penanganan galat rutin, mulai dari lokasi yang ditentukan oleh argumen baris . Argumen baris dapat label baris atau nomor baris yang terletak di dalam prosedur menutup. Galat run-time mengaktifkan pengurus kesalahan dan cabang kontrol ke jalur yang ditentukan. Jika jalur yang ditentukan tidak terletak dalam prosedur yang sama sebagai pernyataan Pada galat , terjadi galat menghimpun.

Untuk menghindari perilaku tak terduga, tempatkan pernyataan Exit Sub , Fungsi keluar pernyataan atau pernyataan Keluar properti sebelum label baris atau nomor baris. Hal ini mencegah penanganan galat kode berjalan ketika ada kesalahan terjadi.

GoTo 0

Menonaktifkan pengurus kesalahan diaktifkan yang ditetapkan dalam prosedur yang saat ini dan me-reset ke tidak ada.

GoTo -1

Menonaktifkan pengecualian diaktifkan yang ditetapkan dalam prosedur yang saat ini dan me-reset ke tidak ada.

Resume Next

Memindahkan kontrol eksekusi pernyataan berikut segera setelah pernyataan yang menyebabkan galat run-time terjadi, dan terus eksekusi dari titik ini maju. Ini adalah bentuk yang disukai menggunakan untuk objek akses, alih-alih menggunakan Pada galat GoTo pernyataan.

Contoh

Dalam kode contoh berikut, pengurus kesalahan diaktifkan di baris pertama rutin dengan pernyataan Pada galat GoTo terstruktur . Lokasi penanganan rutin kesalahan mengidentifikasi Unstructured baris label. Galat rutin menerapkan sederhana Kasus pilih pernyataan yang mengeksekusi sesuai blok kode, tergantung pada galat yang terjadi.

Pernyataan Resume Next di akhir menangani prosedur galat mengembalikan kontrol eksekusi kembali ke baris yang akan diikuti baris yang menyebabkan terjadinya galat.

Penanganan galat kemudian dinonaktifkan dengan pernyataan Pada galat GoTo 0 , diikuti dengan pernyataan Di Error Resume Next , yang mengaktifkan kembali pengurus kesalahan. Jika terjadi galat run-time, pernyataan menyebabkan eksekusi cabang ke baris yang mengikutinya baris yang menyebabkan galat terjadi, dengan cara yang sama bahwa pernyataan Resume Next tidak dalam penanganan rutin kesalahan. Dalam kasus ini, baris tersebut adalah jika pernyataan yang mengevaluasi nomor galat dan menampilkan pengguna, serta menghapus objek galat.

   Public Sub fnErrors()
   On Error GoTo Unstructured ' Enable error handler

     Dim Result As Integer
     Dim Value1 As Integer = 9
     Dim Value2 As Integer = 0
 
     On Error GoTo 0 ' Disables the error handler
 
     'Moves execution to the line following the line that caused the error.
     On Error Resume Next
 
     Result = Value1 / Value2 ' Division by zero, cause an overflow error.
 
     ' Catch the overflow error caused by dividing by zero.
     If Err.Number = 6 Then
       MessageBox.Show("Error Number: " & Err.Number.ToString)
       Err.Clear() ' Clear Errors
     End If
     Exit Sub

   Unstructured:  ' Location of error handler
     Select Case Err.Number
       Case 6
         ' Display the error number.
         MessageBox.Show("Divided by zero")
       Case Else
         ' Catch all other type of errors.
         MessageBox.Show(Err.Description)
     End Select
     'Resume execution to the line following the line that caused the error.
     Resume Next
   End Sub
    

Penanganan galat terstruktur

Penanganan galat terstruktur, Visual Basic sekarang memiliki cara efektif untuk mencegah galat tak terduga menghentikan eksekusi aplikasi. Penanganan galat terstruktur juga menyediakan programmer dengan cara yang lebih sederhana untuk membuat aplikasi yang kuat yang lebih mudah untuk mempertahankan.

Penanganan galat terstruktur diterapkan dalam Visual Basic. NET atau Visual Basic 2005 dengan mencoba ... Menangkap... Akhirnya blok laporan. Coba ... Menangkap... Akhirnya untuk yang pertama kalinya untuk Visual Basic, blok menyediakan kemampuan penanganan galat bertumpuk.

Coba... Menangkap... Akhirnya laporan

Kode berikut ini menunjukkan struktur mencoba... Menangkap... Akhirnya pernyataan.

   Try 
     'Encapsulates a block of code that may produce a run-time error.
   Catch [Optional Filters]
     'The code runs if any of the statements in the Try block fails and filter is evaluated as true.
   [Additional Catch Blocks]
   Finally
     'Code executed after Try and Catch statement.
   End Try
    
Kode yang diharapkan untuk menghasilkan galat run-time harus ditempatkan dalam blok mencoba untuk mengelola dan memantau oleh Pengurus kesalahan. Jika kode ini menghasilkan galat selama eksekusi, Visual Basic memeriksa semua menangkap pernyataan diterapkan dalam mencoba... Menangkap... Akhirnya blok untuk menemukan kondisi yang cocok dengan kesalahan. Jika Visual Basic menemukan kondisi cocok, kontrol eksekusi dipindahkan ke baris pertama kode dalam menangkap pernyataan. Jika Visual Basic tidak menemukan kondisi yang cocok, galat disebarkan ke luar mencoba... Menangkap... Akhirnya pernyataan. Pernyataan ini dapat ditemukan di prosedur yang sama (bersarang pernyataan) atau prosedur sebelumnya yang disebut yang menghasilkan galat. Proses ini diulangi hingga pernyataan cocok ditemukan. Jika pernyataan cocok tidak ditemukan, galat yang dihasilkan, dan aplikasi dihentikan.

Pernyataan terakhir dijalankan terakhir, tanpa memperhatikan apakah ada kesalahan yang ditemukan. Dengan kata lain, jika tidak cocok menangkap pernyataan ditemukan, pernyataan terakhir mengeksekusi sebelum penyebaran pernyataan luar.

Hierarki dan penyebaran ini ditunjukkan dengan kode berikut:

   Module StructuredError
     Sub Main()
       Try
         fnStructured()
       Catch ex As Exception ' Catches all exceptions.
         Debug.WriteLine("Exception Information: " & vbCrLf & ex.ToString)
         'Displays the representation of current exception.
       Finally
         Debug.WriteLine("Main: Finally executed !")
       End Try
     End Sub

     Public Sub fnStructured()
       'Nested Error Handling
       Try
         Try
           Dim X As Integer = 9
           Dim Y As Integer = 0
           Dim Result As Integer
           Result = X / Y
         Catch e As DataException ' Catches only DataException.
           'Displays the representation of current exception.
           Debug.WriteLine("Exception Information: " & vbCrLf & e.Message) 
         Finally
           Debug.WriteLine("fnStructured: Inner Finally executed !")
         End Try
       Catch e As InvalidCastException ' Catches only defined exception.
         'Displays the representation of current exception.
         Debug.WriteLine("Exception Information: " & vbCrLf & e.ToString)
       Finally
         Debug.WriteLine("fnStructured: Outer Finally executed !")
       End Try
     End Sub
   End Module
    
Dalam contoh sebelumnya, galat dalam prosedur fnStructured(). Ini adalah Stack Overflow kesalahan, disebabkan oleh pembagian dengan nol (0). Prosedur ini menerapkan dua Mencoba...Menangkap...Akhirnya serangkaian pernyataan, tetapi tidak satu memiliki pencocokan Menangkap pernyataan, dan kesalahan tidak tertangkap. Sebelum kontrol disebarkan di panggilan tumpukan, kode yang dirumuskan dalam Akhirnya blok dijalankan. The Mencoba...Menangkap...Akhirnya blok yang dilaksanakan di Sub utama memiliki kondisi umum yang menangkap semua pengecualian yang dilemparkan di yang Coba blok.

Berikut adalah output prosedur sebelumnya:
fnStructured: Inner Finally executed !
fnStructured: Outer Finally executed !
Exception Information:
System.OverflowException: Arithmetic operation resulted in an overflow. at
StructuredError.StructuredError.fnStructured() in C:\Documents and
Settings\heikkiri\My Documents\Visual Studio Projects\Temp\StructuredError\StructuredError.vb:line 21 at 
StructuredError.StructuredError.Main() in C:\Documents and 
Settings\heikkiri\My Documents\Visual Studio
Projects\Temp\StructuredError\StructuredError.vb:line 5
Main: Finally executed !
    

Err objek

Err objek, yang merupakan warisan dari Microsoft Visual Basic 6.0, hanya dapat digunakan untuk menangkap kesalahan dalam prosedur yang menerapkan terstruktur galat menangani dengan pernyataan Pada galat .

The Err objek berisi informasi tentang kesalahan yang terjadi selama eksekusi aplikasi. Ketika eksekusi memasuki sebuah prosedur yang berisi kesalahan penanganan, sifat-sifat Err objek yang ditetapkan ke nol (0) atau nol-panjang-string (""). Jika kesalahan terjadi selama eksekusi, properti kemudian ditetapkan untuk memberikan informasi yang unik tentang kesalahan yang terjadi, melalui sifat-sifatnya. Contoh Err objek dapat diperoleh melalui Microsoft.VisualBasic.Information.err fungsi; Namun, karena Err objek adalah objek intrinsik dengan lingkup global, hal ini tidak diperlukan untuk membuat sebuah instance objek ini pada jangka waktu.

Kasus dari galat run-time, sifat-sifat Err objek dapat digunakan untuk menangani kesalahan (tergantung pada jenis), dan juga untuk menampilkan informasi kepada pengguna tentang kesalahan yang terjadi. Tabel berikut menunjukkan sifat-sifat berbeda yang terkait dengan Err objek.

PropertiDeskripsi
DeskripsiMengembalikan atau menetapkan untai yang berisi deskripsi galat yang terjadi.
ERLMengembalikan nilai bilangan bulat yang menunjukkan jumlah baris terakhir pernyataan yang dieksekusi.
HelpContextMengembalikan atau menetapkan bilangan bulat yang berisi ID konteks topik, berkas bantuan.
HelpFileMengembalikan atau menetapkan ekspresi string yang berisi lintasan lengkap berkas bantuan yang terkait dengan kesalahan.
LastDLLErrorMengembalikan kode galat sistem yang dihasilkan oleh panggilan ke berkas Perpustakaan tautan dinamis (DLL).
NomorMengembalikan atau menetapkan nilai numerik yang menunjukkan kesalahan.
SumberMengembalikan atau menetapkan untai yang menentukan nama objek atau aplikasi yang berasal dari galat.

Objek Err memiliki dua metode yang berhubungan dengannya: meningkatkan dan jelas.

MetodeDeskripsi
HapusDigunakan untuk menghapus semua properti untuk objek Err .
MeningkatkanDigunakan untuk menghasilkan galat run-time, diidentifikasi dengan nomor galat yang disampaikan sebagai salah satu parameternya.

Pengecualian kelas


   System.Object
      System.Exception
    
Seperti yang dinyatakan di dalam artikel ini, metoda kesalahan penanganan dalam Visual Basic.NET atau Visual Basic 2005 adalah penanganan kesalahan terstruktur, yang dilaksanakan dengan Mencoba...Menangkap...Akhirnya blok. Semua pengecualian yang terperangkap dalam Visual Basic.NET atau Visual Basic 2005 berasal dari kelas ini, misalnya, OverFlowException. Kasus dari galat run-time, Visual Basic.NET atau Visual Basic 2005 melempar Pengecualian objek yang dapat berupa sistem yang dihasilkan atau kustom yang dihasilkan. Metode untuk menangkap ini Pengecualian dijelaskan di bagian "Terstruktur kesalahan penanganan" dari artikel ini.

Apabila pengecualian dibuang, objek Err global diatur ke nilai yang sesuai, dan contoh pengecualian objek baru dibuat. Hal ini berisi informasi lebih lanjut tentang galat yang terjadi. Sebagai contoh, properti StackTrace berisi daftar metode yang disebut dan menyebabkan terjadinya galat.

Tabel berikut ini menunjukkan properti umum yang tersedia untuk pengecualian yang terperangkap dalam penanganan galat terstruktur.

PropertiDeskripsi
HelpLinkMengembalikan atau menetapkan link ke berkas bantuan yang terkait dengan pengecualian ini.
InnerExceptionMengembalikan contoh pengecualian yang menyebabkan pengecualian saat ini akan terjadi.
PesanMengembalikan pesan yang menjelaskan pengecualian.
SumberMengembalikan atau menetapkan nama aplikasi atau objek yang menyebabkan galat.
StackTraceMengembalikan sebuah string yang menyajikan frame dalam tumpukan panggilan pada waktu saat pengecualian telah dilemparkan.
TargetSiteMengembalikan metode yang membuang pengecualian.


Tabel berikut ini menunjukkan metode umum yang diterapkan dengan pengecualian kelas.

MetodeDeskripsi
Sama dengan (warisan dari objek)Kelebihan beban metode yang digunakan untuk menentukan apakah dua contoh dari objek sama.
GetBaseExceptionJika metode ini akan ditimpa di kelas, menghasilkan pengecualian yang merupakan penyebab dari satu atau lebih pengecualian berikutnya.
GetHashCodeBerfungsi sebagai fungsi hash untuk jenis tertentu; cocok untuk digunakan dalam menerapkan algoritma algoritma dan struktur.
GetObjectDataKetika ditimpa di kelas, GetObjectData menetapkan SerializationInfo dengan informasi tentang pengecualian.
GetType (warisan dari objek)Mengembalikan jenis hal saat ini.
ToStringDitimpa fungsi yang membuat dan mengembalikan presentasi string pengecualian.

Objek Err dipertahankan dalam Visual Basic .NET atau Visual Basic 2005 alasan kompatibilitas dan untuk memudahkan migrasi dari 6.0 Visual Basic untuk aplikasi Visual Basic 2005 atau Visual Basic .NET. Disarankan bahwa semua galat penanganan dalam aplikasi Visual Basic .NET atau Visual Basic 2005 dilakukan menggunakan penanganan galat/pengecualian terstruktur.
REFERENSI
Berkas bantuan:
  • Penanganan pengecualian terstruktur
  • Penanganan pengecualian terstruktur
  • ERR objek
  • Pengecualian kelas

Peringatan: Artikel ini telah diterjemahkan secara otomatis

Properti
ID Artikel: 311326 - Tinjauan Terakhir: 09/24/2011 18:23:00 - Revisi: 2.0
  • Microsoft Visual Basic 2005
  • Microsoft Visual Basic .NET 2003 Standard Edition
  • Microsoft Visual Basic .NET 2002 Standard Edition
  • kbvs2005swept kbvs2005applies kbinfo kbmt KB311326 KbMtid
 

Tidak ada komentar:

Posting Komentar