Debugging 64-bit WinForms Apps di VS2010: Hilang Pengecualian Undandled
Debugging Aplikasi Windows WinForms 64-bit baru di Visual Studio 2010? Anda mungkin mendapati pengecualian yang tidak diawasi tidak mencetuskan debugger. Ini disebabkan oleh lapisan emulasi WOW64, yang memintas pengecualian dalam kod yang bertindak balas terhadap pemberitahuan pengurus tetingkap 64-bit (seperti acara
). Form1_Load
punca dan kesan akar
Masalahnya berpunca daripada ketidakupayaan Windows untuk mengendalikan pengecualian yang bergerak dari kod 32-bit (aplikasi anda) ke kod 64-bit (sumber pemberitahuan). Ini membuat debugging sukar kerana pengecualian tidak dapat dilihat oleh debugger.
Penyelesaian
Berikut adalah beberapa cara untuk menangani ini:
- sasaran anycpu, melumpuhkan keutamaan 32-bit: Menetapkan sasaran platform projek anda kepada "anycpu" dan nyahkan "lebih suka 32-bit" memaksa proses 64-bit, melangkaui isu WOW64. Nota: Ini melumpuhkan "Edit dan Teruskan" dalam versi VS sebelum 2013 dan mungkin menyebabkan masalah dengan ketergantungan 32-bit.
- Membolehkan pengecualian CLR membuang: dalam tetingkap "Pengecualian" debugger (DEBUG & GT; pengecualian), periksa kotak "dilemparkan" untuk pengecualian CLR. Ini memaksa titik putus pada asal pengecualian.
- Bungkus acara dalam
Load
: try/catch
Konstel Kod Pengendali Acara anda dalam blok Load
. Gunakan try/catch
di blok Environment.FailFast()
untuk kemalangan terkawal dengan laporan terperinci. catch
- Laraskan :
UnhandledExceptionMode
Dalam kaedah anda, hubungi Main()
untuk mengelakkan gelung mesej daripada menekan pengecualian semasa debugging. Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException)
- Penggunaan semula Penggunaan acara:
Load
Pertimbangkan jika pengendali acara benar-benar memerlukan semua kodnya. Menggerakkan beberapa tindakan kepada pembina mungkin membantu. Load
- Naik taraf ke Windows 8 atau lebih baru: Versi Windows yang lebih baru menangani isu WOW64.
Penyelesaian ini tidak membetulkan masalah yang mendasari, tetapi mereka menyediakan cara praktikal untuk debug pengecualian yang tidak diawasi dalam senario ini.
Atas ialah kandungan terperinci Kenapa pengecualian yang tidak diawasi hilang dalam aplikasi WinForms 64-bit VS2010 saya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!
Kenyataan:Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn