Di alat / pengecualian, saya telah menetapkan opsi bahwa debugger berhenti ketika pengecualian dilemparkan. Apakah itu tertangkap atau tidak.
Bagaimana cara mengecualikan pengecualian dari aturan itu? Di suatu tempat di kode saya ada pengecualian tertangkap yang merupakan bagian dari logika program. Jadi saya jelas tidak ingin pengecualian itu menghentikan debugger setiap kali dipukul.
Contoh: Saya ingin mengabaikan pengecualian nullreference (yang tertangkap) di baris 344. Saya ingin menghentikan semua pengecualian lainnya
Jawaban:
Jika saya ingat dengan benar, Anda dapat menggunakan
DebuggerStepThrough
atribut pada metode yang berisi kode yang Anda tidak ingin pengecualian untuk diaktifkan. Saya kira Anda dapat mengisolasi kode yang mengaktifkan pengecualian yang mengganggu dalam sebuah metode dan menghiasinya dengan atribut.sumber
DebuggerStepThrough
atribut tidak mempengaruhi perilaku debugger dengan pengecualian pertama-kesempatan.DebuggerStepThrough
atribut tidak memiliki arti untuk CLR. Ini ditafsirkan oleh debugger. Tampaknya ini tidak dapat diandalkan dalam berbagai keadaan, dan ituDebuggerHidden
akan bekerja dengan andal stackoverflow.com/a/3455100/141172DebuggerHidden
adalah temanmu!Diuji di VS2010 dan berfungsi dengan baik.
Meskipun
DebuggerStepThrough
tampaknya juga berfungsi untuk beberapa versi debugger tertentu,DebuggerHidden
tampaknya berfungsi untuk berbagai situasi berdasarkan komentar untuk kedua jawaban.Perhatikan bahwa kedua opsi saat ini tidak berfungsi dengan metode blok iterator atau untuk metode async / await . Ini dapat diperbaiki di pembaruan Visual Studio.
sumber
DebuggerHidden
juga ...DebuggerStepThrough adalah salah satu yang akan digunakan untuk mencegah debugger rusak dalam metode di mana ada coba / tangkap.
Tetapi ini hanya berfungsi jika Anda tidak menghapus centang opsi "Aktifkan Hanya Kode Saya (Hanya Dikelola)" di pengaturan Umum Opsi Debugging Visual Studio (menu Alat / Opsi, node Debugging / Umum) ...
Info selengkapnya tentang atribut tersebut di http://abhijitjana.net/2010/09/22/tips-on-debugging-using-debuggerstepthrough-attribute/
DebuggerHidden hanya akan mencegah Debugger menampilkan metode di mana pengecualian dilemparkan. Sebaliknya, ini akan menampilkan metode pertama pada tumpukan yang tidak ditandai dengan atribut itu ...
sumber
Atribut yang ditentukan dalam jawaban lain (dan yang lain seperti
DebuggerNonUserCode
atribut) tidak lagi bekerja dengan cara yang sama secara default di Visual Studio 2015. Debugger akan merusak pengecualian di pasar metode dengan atribut tersebut, tidak seperti di versi VS. Untuk mematikan peningkatan kinerja yang mengubah perilakunya, Anda perlu mengubah pengaturan registri:reg add HKCU\Software\Microsoft\VisualStudio\14.0_Config\Debugger\Engine /v AlwaysEnableExceptionCallbacksOutsideMyCode /t REG_DWORD /d 1
Informasi lebih lanjut dapat ditemukan di blog studio visual .
(Ini mungkin harus menjadi komentar pada jawaban teratas tetapi saya tidak memiliki cukup reputasi)
sumber
Anda tidak dapat memilih pengecualian yang dilemparkan di tempat tertentu dalam kode Anda. Namun Anda dapat menonaktifkan pengecualian dari jenis tertentu.
Jika kode Anda sendiri memunculkan pengecualian yang dimaksud, saya akan menjadikannya pengecualian khusus, yang berasal dari apa pun yang cocok, dan kemudian menonaktifkan debug melanggar pada jenis turunan ini.
Menonaktifkan pengecualian sistem sebagai NullReferenceException akan memengaruhi seluruh sistem, yang tentu saja tidak diinginkan selama pengembangan.
Perhatikan bahwa ada dua jenis perilaku putus untuk pengecualian:
Anda dapat menghapus centang di 'Thrown' untuk NullReferenceException yang akan memberi Anda manfaat tidak melanggar setiap kali sistem Anda melewati baris yang dimaksud dalam kode Anda, tetapi tetap melanggar jika Anda memiliki beberapa ekspektasi NullReference yang tidak tertangani yang terjadi di bagian lain dari sistem.
sumber