Sabtu, 18 Mei 2013


PENGANTAR
Exception(Pengecualian) adalah suatu peristiwa yang terjadi selama pelaksanaan program, dan membutuhkan eksekusi kode luar aliran normal kontrol. Ada dua jenis pengecualian: pengecualian hardware dan software pengecualian. Pengecualian Hardware yang diprakarsai oleh CPU. Mereka dapat hasil dari eksekusi urutan instruksi tertentu, seperti pembagian dengan nol atau usaha untuk mengakses alamat memori yang tidak valid. Pengecualian Software yang dimulai secara eksplisit oleh aplikasi atau sistem operasi. Sebagai contoh, sistem dapat mendeteksi ketika nilai parameter tidak valid ditentukan.Structured
Exception handling adalah suatu mekanisme untuk menangani hardware dan software pengecualian. Oleh karena itu, kode Anda akan menangani perangkat keras dan perangkat lunak pengecualian identik. Penanganan eksepsi terstruktur memungkinkan Anda untuk memiliki kontrol penuh atas penanganan pengecualian, menyediakan dukungan untuk debugger, dan dapat digunakan di semua bahasa pemrograman dan mesin. Pengecualian penanganan vektor adalah perluasan untuk penanganan eksepsi terstruktur.Sistem ini juga mendukung penanganan terminasi, yang memungkinkan Anda untuk memastikan bahwa setiap kali tubuh dijaga kode dijalankan, sebuah blok tertentu dari kode terminasi juga dieksekusi. Kode terminasi dijalankan terlepas dari bagaimana aliran kontrol meninggalkan tubuh dijaga. Misalnya, penangan terminasi dapat menjamin bahwa tugas bersih-bersih dilakukan bahkan jika pengecualian atau beberapa error lain terjadi ketika tubuh dijaga kode yang sedang dieksekusi.

Terstruktur pengecualian penanganan dan mekanisme penanganan terminasi merupakan bagian integral dari sistem, mereka memungkinkan sistem untuk menjadi kuat. Anda dapat menggunakan mekanisme ini untuk membuat aplikasi secara konsisten kuat dan dapat diandalkan.Structured exception handling dibuat tersedia terutama melalui dukungan compiler. Sebagai contoh, Microsoft C / C + + Mengoptimalkan Compiler mendukung __ mencoba kata kunci yang mengidentifikasi tubuh dijaga kode, __ kecuali kata kunci yang mengidentifikasi pengecualian handler, dan __ akhirnya kata kunci yang mengidentifikasi handler terminasi. Meskipun gambaran ini menggunakan contoh-contoh spesifik untuk Microsoft C / C + + compiler, compiler lain memberikan dukungan ini juga.

Pengecualian dapat dimulai oleh perangkat keras atau perangkat lunak, dan dapat terjadi pada kernel-mode serta kode mode pengguna. Penanganan eksepsi terstruktur menyediakan mekanisme tunggal untuk penanganan kernel-mode dan user-mode pengecualian.Pelaksanaan urutan instruksi tertentu dapat mengakibatkan pengecualian yang diprakarsai oleh hardware. Misalnya, pelanggaran akses yang dihasilkan oleh perangkat keras ketika proses mencoba untuk membaca dari atau menulis ke alamat virtual yang tidak memiliki akses yang tepat. Acara yang memerlukan penanganan eksepsi juga dapat terjadi selama proses eksekusi rutin perangkat lunak (misalnya, ketika sebuah nilai parameter tidak valid ditentukan). Ketika ini terjadi, benang dapat memulai pengecualian eksplisit dengan memanggil fungsi RaiseException. Fungsi ini memungkinkan benang menelepon untuk menentukan informasi yang menggambarkan pengecualian. Pengecualian bisa berlanjut atau noncontinuable. Pengecualian noncontinuable muncul ketika acara tersebut tidak berlanjut di hardware, atau jika kelanjutan tidak masuk akal. Pengecualian noncontinuable tidak mengakhiri aplikasi. Oleh karena itu, aplikasi mungkin dapat menangkap pengecualian dan menjalankan. Namun, pengecualian noncontinuable biasanya muncul sebagai akibat dari tumpukan rusak atau masalah serius lainnya, sehingga sulit untuk pulih dari pengecualian.

Penanganan sistem pengecualian mode pengguna menyediakan dukungan untuk debugger canggih. Jika proses di mana pengecualian terjadi sedang debugged, sistem menghasilkan acara debug. Jika debugger menggunakan fungsi WaitForDebugEvent, acara debug menyebabkan bahwa fungsi untuk kembali dengan pointer ke struktur DEBUG_EVENT. Struktur ini berisi proses dan pengenal benang debugger dapat digunakan untuk mengakses catatan konteks thread. Struktur ini juga mengandung struktur EXCEPTION_DEBUG_INFO yang mencakup salinan dari catatan pengecualian.Ketika sistem mencari pengecualian handler, itu membuat dua upaya untuk memberitahukan debugger proses itu. Upaya pemberitahuan pertama menyediakan debugger dengan kesempatan untuk menangani breakpoint atau pengecualian satu langkah. Ini dikenal sebagai pemberitahuan pertama-kebetulan. Pengguna kemudian dapat mengeluarkan perintah debugger untuk memanipulasi lingkungan proses itu sebelum penangan pengecualian dieksekusi. Upaya kedua untuk memberitahu debugger hanya terjadi jika sistem tidak dapat menemukan handler pengecualian berbasis frame yang menangani pengecualian. Ini dikenal sebagai pemberitahuan-kesempatan terakhir. Jika debugger tidak menangani pengecualian setelah pemberitahuan-kesempatan terakhir, sistem mengakhiri proses yang sedang debugged.Pada setiap upaya pemberitahuan, debugger menggunakan fungsi ContinueDebugEvent untuk mengembalikan kontrol ke sistem. Sebelum kembali kontrol, debugger dapat menangani pengecualian dan memodifikasi negara thread yang sesuai, atau dapat memilih untuk tidak menangani pengecualian. Menggunakan ContinueDebugEvent, debugger dapat menunjukkan bahwa ia telah menangani pengecualian, dalam hal keadaan mesin dipulihkan dan eksekusi thread dilanjutkan pada titik di mana pengecualian terjadi. Debugger juga dapat menunjukkan bahwa itu tidak menangani pengecualian, yang menyebabkan sistem untuk melanjutkan pencarian untuk pengecualian handler.

Tujuan Sebuah aplikasi dapat menggunakan aplikasi Pemulihan dan Restart (ARR) untuk menyimpan data dan informasi negara sebelum keluar aplikasi karena eksepsi tidak tertangani atau ketika aplikasi berhenti merespons. Aplikasi ini juga ulang, jika diminta.Sebuah aplikasi juga bisa restart jika installer update komponen dari aplikasi, atau jika komputer perlu me-restart sebagai hasil dari update. Perhatikan bahwa untuk mendukung me-restart aplikasi otomatis setelah update installer aplikasi, baik aplikasi dan installer harus ditulis dengan tepat. Untuk rincian, lihat Pendaftaran untuk Restart Aplikasi.penonton PengembangARR dirancang untuk C dan C + + pengembang.Persyaratan Run-timeARR tersedia mulai dengan sistem operasi Windows Vista.

Sebuah aplikasi dapat menggunakan aplikasi Pemulihan dan Restart (ARR) untuk menyimpan data dan informasi negara sebelum keluar aplikasi karena eksepsi tidak tertangani atau ketika aplikasi berhenti merespons. Aplikasi ini juga ulang, jika diminta.Ketika Anda mendaftar untuk pemulihan atau restart, informasi pendaftaran akan ditambahkan ke proses. Windows Error Reporting (Wer) menggunakan informasi pendaftaran untuk memanggil callback pemulihan dan restart aplikasi Anda. Misalnya, jika Anda mendaftar untuk pemulihan dan aplikasi Anda menemukan sebuah eksepsi tidak tertangani, Wer menampilkan dialog untuk pengguna yang memberikan pengguna pilihan untuk memeriksa solusi online, menutup program, atau debugging program. Jika pengguna memilih untuk langsung memeriksanya untuk solusi atau menutup program, Wer memanggil callback terdaftar dan memberikan aplikasi kesempatan untuk menyimpan data dan informasi negara. Ketika pemulihan selesai, aplikasi diakhiri.Jika Anda mendaftar untuk restart dan aplikasi Anda menemukan sebuah eksepsi tidak tertangani, Wer menampilkan dialog yang sama kepada pengguna tetapi memberikan pilihan untuk me-restart program bukan menutup program. Jika Anda mendaftar untuk kedua pemulihan dan restart, pemulihan lebih cepat terjadi; aplikasi ini kemudian dihentikan dan dimulai kembali.Sebuah aplikasi responsif ditangani dengan cara yang sama. Sebuah aplikasi dianggap tidak responsif jika tidak merespon Windows pesan selama lima detik dan pengguna kemudian mencoba untuk berinteraksi dengan aplikasi tersebut, pengguna akan melihat (Tidak Menanggapi) dalam judul bar. WER diaktifkan ketika pengguna mengklik tombol sistem tertutup.Anda harus mendaftar untuk pemulihan atau restart, atau menghapus pendaftaran, sebelum aplikasi menjadi tidak responsif atau pertemuan unhandled pengecualian. Namun, dalam callback pemulihan Anda, Anda dapat mengubah baris perintah restart.
Untuk rincian tentang mendaftar untuk pemulihan atau restart, lihat topik berikut:
Bagian ini memberikan rincian tentang menerapkan fitur pemulihan dalam aplikasi Anda. Anda harus mempertimbangkan untuk menerapkan fitur ini untuk menangani kasus-kasus berikut:Memulihkan ketika aplikasi mengalami unhandled pengecualian atau berhenti meresponsMencegah hilangnya data saat aplikasi tiba-tiba berhenti bekerja.Menyimpan data dan kondisi aplikasi saat aplikasi sedang ditutup karena pembaruan perangkat lunakMemungkinkan pengguna untuk mulus kembali data aplikasi ketika aplikasi ditutup karena instalasi software update (yang mungkin terjadi tanpa memberikan pengguna kesempatan untuk menyimpan data).Memulihkan ketika aplikasi mengalami unhandled pengecualian atau berhenti meresponsUntuk mendaftarkan callback pemulihan, memanggil fungsi RegisterApplicationRecoveryCallback. Windows Error Reporting (Wer) panggilan panggilan balik pemulihan Anda sebelum aplikasi keluar karena eksepsi tidak tertangani atau aplikasi tidak menanggapi. Anda menggunakan callback pemulihan untuk mencoba untuk menyimpan data dan informasi negara sebelum aplikasi berakhir. Anda kemudian dapat menggunakan data yang disimpan dan informasi negara saat aplikasi di-restart.Selama proses pemulihan, Anda harus memanggil fungsi ApplicationRecoveryInProgress dalam interval ping tertentu, jika tidak, proses pemulihan dihentikan. Memanggil ApplicationRecoveryInProgress memungkinkan Wer tahu bahwa Anda masih aktif memulihkan data. Ketika proses pemulihan selesai, memanggil fungsi ApplicationRecoveryFinished. Perhatikan bahwa fungsi ApplicationRecoveryFinished harus menjadi panggilan terakhir yang Anda lakukan sebelum keluar karena fungsi segera berakhir aplikasi.Anda harus mempertimbangkan secara berkala menyimpan salinan sementara dari data dan informasi negara selama normal dari proses aplikasi. Berkala menyimpan data dapat menghemat waktu dalam proses pemulihan.Menyimpan data dan kondisi aplikasi saat aplikasi sedang ditutup karena pembaruan perangkat lunakJika sebuah aplikasi Windows dapat diperbarui, aplikasi juga harus memproses WM_QUERYENDSESSION dan pesan WM_ENDSESSION. Installer mengirimkan pesan ini ketika installer membutuhkan aplikasi untuk shutdown untuk menyelesaikan instalasi atau saat reboot diperlukan untuk menyelesaikan instalasi. Perhatikan bahwa dalam kasus ini, aplikasi memiliki sedikit waktu untuk melakukan recovery. Misalnya, aplikasi tersebut harus merespon setiap pesan dalam waktu lima detik.Untuk aplikasi konsol yang dapat diperbarui, Anda harus mempertimbangkan penanganan pemberitahuan CTRL_C_EVENT. Sebagai contoh, lihat Pendaftaran untuk Restart Aplikasi. Installer mengirimkan pemberitahuan ini ketika membutuhkan aplikasi untuk shutdown untuk menyelesaikan pembaruan. Aplikasi ini memiliki 30 detik untuk menangani pemberitahuan.Contoh berikut menunjukkan bagaimana cara mendaftar untuk pemulihan, implementasi callback pemulihan sederhana, dan bagaimana memproses pesan-pesan WM_QUERYENDSESSION dan WM_ENDSESSION

ERROR HANDLING
·         Error Mode
Modus kesalahan ini menunjukkan ke sistem bagaimana aplikasi akan menanggapi kesalahan serius. Kesalahan serius termasuk kegagalan disk, kesalahan drive-tidak-siap, misalignment data, dan pengecualian tertangani. Modus Kesalahan ini dapat dikelola oleh baik per-benang atau per-proses dasar. Sebuah aplikasi dapat membiarkan sistem menampilkan kotak pesan yang memberitahu pengguna bahwa kesalahan telah terjadi, atau dapat menangani kesalahan.Untuk menangani kesalahan ini tanpa campur tangan pengguna, gunakan SetErrorMode atau SetThreadErrorMode benang khusus. Setelah memanggil salah satu fungsi dan menetapkan bendera yang tepat, sistem tidak akan menampilkan kotak pesan kesalahan yang sesuai.Sebuah proses dapat mengambil modus kesalahan dengan menggunakan GetErrorMode atau GetThreadErrorMode.Praktik terbaik adalah bahwa semua aplikasi memanggil fungsi SetErrorMode proses-lebar dengan parameter SEM_FAILCRITICALERRORS saat startup. Hal ini untuk mencegah kesalahan dari dialog modus tergantung aplikasi.Selain itu, penelepon harus mendukung versi benang-spesifik fungsi-fungsi karena mereka kurang mengganggu perilaku normal dari sistem.
·       Last-Error Code
Bila terjadi kesalahan, fungsi sistem yang paling mengembalikan kode kesalahan, biasanya 0, NULL, atau -1. Banyak fungsi sistem juga menetapkan kode kesalahan tambahan yang disebut kode-kesalahan terakhir. Kode kesalahan ini dipertahankan secara terpisah untuk setiap thread berjalan, kesalahan dalam satu thread tidak menimpa kode kesalahan terakhir di thread lain. Setiap fungsi dapat memanggil SetLastError atau fungsi SetLastErrorEx untuk mengatur kode-kesalahan terakhir untuk thread saat ini. Fungsi-fungsi dimaksudkan terutama untuk perpustakaan dynamic link (DLL), sehingga mereka dapat memberikan informasi kepada aplikasi yang memanggil. Perhatikan bahwa beberapa fungsi panggilan SetLastError atau SetLastErrorEx dengan 0 ketika mereka berhasil, menghapus kode kesalahan yang ditetapkan oleh fungsi yang paling baru-baru ini gagal, sementara yang lainnya tidak.Sebuah aplikasi dapat mengambil kode-kesalahan terakhir dengan menggunakan fungsi GetLastError, kode kesalahan mungkin mengatakan lebih banyak tentang apa yang sebenarnya terjadi untuk membuat fungsi gagal. Dokumentasi untuk fungsi sistem akan menunjukkan kondisi di mana fungsi menetapkan kode-kesalahan terakhir.Sistem ini mendefinisikan satu set kode kesalahan yang dapat ditetapkan sebagai kode-kesalahan terakhir atau dikembalikan oleh fungsi tersebut. Kode kesalahan adalah nilai-nilai 32-bit (bit 31 adalah bit yang paling signifikan). Bit 29 dicadangkan untuk didefinisikan aplikasi kode kesalahan, tidak ada kode kesalahan sistem memiliki sedikit set ini. Jika anda mendefinisikan kode kesalahan untuk aplikasi Anda, mengatur sedikit ini untuk menunjukkan bahwa kode kesalahan telah didefinisikan oleh aplikasi dan memastikan bahwa kode kesalahan tidak bertentangan dengan kode kesalahan didefinisikan sistem. Untuk informasi lebih lanjut, lihat winerror.h dan Sistem Kode Kesalahan.

·       Notifying the User
Untuk memberitahu pengguna bahwa beberapa jenis kesalahan telah terjadi, banyak aplikasi hanya menghasilkan suara dengan menggunakan fungsi MessageBeep atau berkedip jendela dengan menggunakan salah satu FlashWindow atau fungsi FlashWindowEx. Sebuah aplikasi juga dapat menggunakan fungsi-fungsi untuk memperhatikan kesalahan dan kemudian menampilkan kotak pesan atau pesan kesalahan yang berisi rincian tentang kesalahan.
·       Tabel Pesan
Tabel pesan adalah sumber daya khusus string yang digunakan ketika menampilkan pesan kesalahan. Mereka dinyatakan dalam file sumber daya menggunakan pernyataan sumber-definisi MESSAGETABLE. Untuk mengakses string pesan, gunakan fungsi FormatMessage.Sistem ini menyediakan meja pesan untuk kode kesalahan sistem. Untuk mengambil string yang sesuai dengan kode kesalahan, panggilan FormatMessage dengan bendera FORMAT_MESSAGE_FROM_SYSTEM.Untuk menyediakan meja pesan untuk aplikasi Anda, ikuti petunjuk dalam pesan teks File. Untuk mengambil string dari meja pesan Anda, hubungi FormatMessage dengan bendera FORMAT_MESSAGE_FROM_HMODULE.

·       Fatal Application Exit
Fungsi FatalAppExit menampilkan kotak pesan dan berakhir aplikasi ketika pengguna menutup kotak pesan. Fungsi ini seharusnya hanya digunakan sebagai pilihan terakhir, karena mungkin tidak membebaskan memori atau file yang dimiliki oleh aplikasi.


Sumber Refrensi:
http://msdn.microsoft.com/en-us/library/windows/desktop/ee663269(v=vs.85).aspx

1 komentar:

  1. bang kalo sya mau belajar langsung bagaimana caranya? kalo abang ada di daerah bandung saya mau mampir

    BalasHapus