Visual studio dulu memiliki kotak centang khusus untuk "Break on Un-handling exception". Pada tahun 2015 ini telah dihapus (atau dipindahkan ke suatu tempat yang tidak dapat saya temukan). Jadi sekarang proyek saya yang dikonversi tidak lagi rusak jika saya gagal memberikan pengendali pengecualian tingkat pengguna. Saya tidak ingin melanggar semua "pengecualian yang terlempar" karena saya menangani yang spesifik. Di mana saya gagal memberikan penangan khusus.
Saat ini kode saya hanya keluar dari prosedur saat ini dan melanjutkan eksekusi di lokasi tumpukan panggilan berikutnya, TIDAK BAIK.
Ada yang tahu cara mendapatkan ini kembali di Visual Studio 2015? Saya baru saja meningkatkan ke edisi komunitas kemarin.
Tool
atauWindow
tidak memiliki semua lokasi yang diinginkan. Dalam kasus Anda, Anda mencari Pengaturan Pengecualian .Jawaban:
Ada jendela baru bernama "Pengaturan Pengecualian" yang muncul di panel kanan bawah secara default saat Anda mulai men-debug. Ia memiliki semua opsi yang Anda harapkan.
Anda dapat memunculkannya dengan CTRL+ ALT+E
Hal ini memungkinkan Anda untuk memilih pengecualian mana yang menyebabkan jeda dalam debugger.
Namun, kuncinya adalah Anda juga dapat menyetel apakah pengecualian ini selalu rusak, atau hanya rusak jika pengecualian tidak tertangani - tetapi menyetel ini tidak terlalu intuitif.
Anda harus terlebih dahulu memeriksa "Aktifkan Hanya Kode Saya" di bawah Alat> Opsi> Debugging.
Ini kemudian memungkinkan Anda untuk mengklik kanan tajuk kolom (Hentikan Saat Dilempar) di jendela Pengaturan Pengecualian baru, dan menambahkan kolom "Tindakan Tambahan", yang kemudian memungkinkan Anda untuk mengatur setiap pengecualian sebagai "Lanjutkan saat tidak ditangani dalam kode pengguna".
Jadi, cukup klik kanan pengecualian atau seluruh grup dan nonaktifkan tanda "Lanjutkan saat tidak ditangani dalam kode pengguna". Sayangnya, kolom "Tindakan Tambahan" akan muncul kosong yang sama dengan "Hentikan saat tidak ditangani dalam kode pengguna".
Lebih lanjut tentang ini di sini:
http://blogs.msdn.com/b/visualstudioalm/archive/2015/02/23/the-new-exception-settings-window-in-visual-studio-2015.aspx
sumber
Saya memiliki masalah yang sama dan saya berhasil menyelesaikannya dengan melakukan ini -
Itu dia!
Saya terinspirasi posting ini karena saya menggunakan Windows versi x64 .
sumber
System.ArgumentException
ditangani, dan ada saatnya tidak. Saya hanya peduli tentang kerusakan jika tidak ditangani.Untuk googler yang ingin merusak hanya ketika pengecualian menyangkut kode mereka, ada opsi di Visual Studio 2015: Options-> Debugging-> General-> Just My Code. Setelah dicentang, itu memungkinkan untuk tidak rusak ketika pengecualian dikelola (dilempar dan ditangkap) di luar kode Anda.
sumber
Microsoft telah mengubah logika secara halus di jendela pengecualian baru.
Lihat http://blogs.msdn.com/b/visualstudioalm/archive/2015/02/23/the-new-exception-settings-window-in-visual-studio-2015.aspx
Bagian kuncinya adalah:
Namun , jika seperti saya, Anda memiliki Global Unhandled Exception Handler dalam kode Anda, maka item kedua dalam daftar itu adalah kuncinya: Bagi saya, tidak ada pengecualian yang akan benar-benar tidak tertangani, yang tampaknya berbeda dari VS2013.
Untuk mengembalikan perilaku di mana VS terputus pada pengecualian yang tidak tertangani, saya harus mencentang semua jenis pengecualian yang ingin saya hilangkan dan kemudian kedua memastikan bahwa "Opsi Tambahan" (Anda mungkin perlu membuat kolom ini terlihat *) untuk "Lanjutkan ketika tidak ditangani dalam kode pengguna " TIDAK disetel. Logika VS2015 tampaknya tidak menganggap Global Unhandled Exception Handler saya sebagai "ditangani dalam kode pengguna", jadi ia tidak merusak ini; itu tidak merusak pengecualian yang tertangkap. Ini membuatnya berfungsi seperti yang dilakukan VS2013.
* Cara mengaktifkan kolom "Tindakan Tambahan"
sumber
Jika saya membaca dengan benar yang tersirat di sini, masalahnya adalah bahwa pengecualian Anda secara efektif 'menghilang' meskipun perilaku debugger default seharusnya rusak pada pengecualian yang tidak tertangani.
Jika Anda memiliki metode asynchronous, Anda mungkin mengalami masalah ini karena pengecualian tidak tertangkap di thread pool thread sebagai bagian dari kelanjutan tugas tidak dianggap pengecualian tidak tertangani. Sebaliknya, mereka ditelan dan disimpan dengan Tugas.
Misalnya, lihat kode ini:
Jika Anda menjalankan program ini dengan setelan debugger default (berhenti hanya pada pengecualian yang tidak tertangani), debugger tidak akan rusak. Ini karena utas kumpulan utas yang dialokasikan untuk kelanjutan menelan pengecualian (meneruskannya ke contoh Tugas) dan melepaskan dirinya kembali ke kumpulan.
Perhatikan bahwa, dalam hal ini, masalah sebenarnya adalah bahwa
Task
dikembalikan olehTest()
tidak pernah diperiksa. Jika Anda memiliki jenis logika 'api-dan-lupakan' yang serupa dalam kode Anda, maka Anda tidak akan melihat pengecualian pada saat pengecualian tersebut dilempar (bahkan jika 'tidak ditangani' di dalam metode); pengecualian hanya muncul saat Anda mengamati Tugas dengan menunggunya, memeriksa Hasil atau secara eksplisit melihat Pengecualiannya.Ini hanya tebakan, tapi menurut saya kemungkinan besar Anda mengamati sesuatu seperti ini.
sumber
Debugger.Break()
panggilan eksplisit . Bergantian, Anda dapat menambahkan eksplisitDebugger.Break()
diTaskScheduler.UnobservedTaskException
handler, meskipun sisi negatifnya di sini adalah bahwa ini dapat diaktifkan lebih lama dari pengecualian asli, seperti yang terjadi pada utas finalizer ketika Tugas dibersihkan. Secara umum, Anda harus berusaha untuk selalu mengamati hasil Tugas atau setidaknya memiliki blok coba-tangkap untuk dicatat pada saat kegagalan.Dalam pengalaman saya, pengaturan pengecualian pada tahun 2015 akan benar-benar rusak jika Anda mengubah apa pun.
Berharap bahwa jika Anda sampai grup induk "CLR" maka Anda tidak akan mendapatkan execpt melanggar untuk ditangani. Anda akan selalu rusak jika pengecualian tidak tertangani. Tetapi, jika Anda memiliki grup CLR yang tidak dicentang, kode di dalam try ... catch seharusnya tidak menyebabkan jeda. Bukan itu masalahnya.
Solusi: Di kotak alat pengaturan pengecualian baru, klik kanan dan pilih "pulihkan default". Taadaaaa ... Ini berperilaku normal lagi. Sekarang jangan mengacaukannya.
sumber
Coba ikuti instruksinya:
https://msdn.microsoft.com/en-us/library/x85tt0dd.aspx
sumber
try { task.Wait(); } catch { ... }
) dan OperationCanceledException dalam tugas tersebut dianggap tidak tertangani dalam kode pengguna.Itu semua agak membingungkan, dan menurut saya tidak sebagus dialog pengecualian lama, tapi bagaimanapun juga.
Jika pengecualian ada dalam daftar dan dicentang maka debugger akan berhenti setiap kali pengecualian dilemparkan.
Jika pengecualian tidak dicentang atau tidak ada dalam daftar maka debugger hanya akan rusak ketika jenis pengecualian itu tidak ditangani oleh pengguna.
Misalnya, pada tangkapan layar di bawah ini, debugger akan rusak setiap kali a
System.AccessViolationException
dilempar, tetapi untuk semua pengecualian lainnya itu hanya akan rusak jika pengecualian itu tidak ditangani oleh pengguna.sumber
Ketika saya meningkatkan ke VS2015, saya juga mengalami masalah di mana pengecualian digunakan untuk "merusak" aplikasi, tetapi sekarang diabaikan dan dilewatkan begitu saja. Ada kalanya kita ingin kode kita sengaja membuang pengecualian di tempat kita ingin kode berhenti, daripada melanjutkan. Kami selalu menggunakan frasa
Throw New Exception("Message")
untuk membuat kode kami sengaja dipecah:Dengan VS2015, "System.Exception" klasik adalah apa yang terlontar saat kita mengatakannya
Throw New Exception
. Oleh karena itu, kami perlu memeriksa centang "System.Exception" di Pengaturan Pengecualian baru:Centang Kotak System.Exception
Setelah diperiksa, kode kami berfungsi seperti yang diharapkan.
sumber
Solusinya adalah ini secara semantik berlawanan dengan apa yang Anda pikir Anda tetapkan. Anda perlu memastikan bahwa Lanjutkan ketika tertangani dalam kode pengguna yang tidak diaktifkan yaitu tidak diperiksa seperti yang ditunjukkan di bawah Tindakan Tambahan kolom di Exception pengaturan tab - lihat di bawah:
Anda secara efektif mengatakan jangan lanjutkan (yaitu putus) saat tidak ditangani dalam kode
Untuk melakukan ini:
Itu berhasil untuk saya - bahagia lagi.
Ini terjadi di VS 2015
sumber
Pasti ada beberapa bug dalam Visual Studio yang dapat menyebabkannya macet sehingga memerlukan restart. Bahkan VS2015.
Saya memiliki satu situasi berulir di mana file
NullReferenceException
ditangkap oleh penangan 'luar' (masih dalam kode saya) meskipun saya memintanya untuk istirahat ketika dinaikkan.Saya menyadari ini adalah pengecualian 'ditangani' dan Anda berbicara tentang 'tidak tertangani' - namun saya cukup yakin bahwa kadang-kadang restart cepat VS akan memperbaiki ini, jika IISRESET tidak.
sumber
Visual Studio 2017 berfungsi dengan baik dengan penanganan kesalahan. Visual Studio 2015 di sisi lain menyebalkan penanganan kesalahan dengan tugas karena dalam mode debug semua pengecualian yang terjadi dalam tugas async ditangkap tetapi kemudian jika saya melangkahi itu hanya hang tanpa batas. Jika dijalankan tanpa debugging, ia akan hang tanpa batas tanpa terkecuali tertangkap !!! Saya suka studio visual dan telah menggunakannya sejak 1995 dan 2015 adalah versi yang lebih buruk sejauh ini meskipun saya melompat dari 2010 langsung ke 2015. Saya menghabiskan 8 jam mencoba untuk mendapatkan penanganan pengecualian ini bekerja tanpa hasil. Saya menyalin kode persisnya ke 2017 di komputer rumah saya dan berfungsi dengan sempurna. Saya sangat kesal karena Microsoft mendorong tugas ke dalam kerangka kerja yang tidak dapat ditangani oleh kompiler 2015 dengan benar.
sumber