มีคุณสมบัติที่จะแบ่งการดีบักโดยอัตโนมัติเมื่อเกิดข้อยกเว้นครั้งแรกหรือไม่
ดังนั้นเรา
- เริ่มแอปพลิเคชัน
- ทำสิ่งที่ผิดปกติ
- มี IntelliJ โผล่ขึ้นมาในบรรทัดที่ไฮไลต์ที่เกิดข้อยกเว้น
มีคุณสมบัติที่จะแบ่งการดีบักโดยอัตโนมัติเมื่อเกิดข้อยกเว้นครั้งแรกหรือไม่
ดังนั้นเรา
คำตอบ:
เรียกใช้ | ดูเบรกพอยต์ จุดพักข้อยกเว้น
วิธีที่รวดเร็วในการเปิดกล่องโต้ตอบคือกดCtrl+ SHIFT+ F8(บน Mac: Cmd+ SHIFT+ F8) จากนั้นคลิกที่แท็บจุดพักข้อยกเว้น หากนั่นคือแท็บสุดท้ายที่คุณกำลังดูมันจะยังคงถูกเลือกอยู่ทำให้ง่ายต่อการสะบัดแบ่งข้อยกเว้นเปิดและปิด
สิ่งนี้จะทำให้ IntelliJ แตกที่จุดในรหัส (หรือรหัสห้องสมุด) ที่มีการยกข้อยกเว้น โดยเฉพาะคุณจะได้รับ 'โอกาสครั้งแรก' ที่การจัดการข้อยกเว้นก่อนที่สแต็กจะเดินหา catch / ในที่สุดบล็อกที่จะดำเนินการ
เคล็ดลับ: Java มีแนวโน้มที่จะโยนข้อยกเว้นจำนวนมากภายในเมื่อโหลดคลาสดังนั้นการทำลายข้อยกเว้นทั้งหมดนี้อาจกลายเป็นเรื่องน่าเบื่อ ข่าวดีก็คือคุณสามารถยกเว้นข้อยกเว้นบางประเภทได้โดยใช้ฟิลด์เงื่อนไข
ตัวอย่างเช่น:
!(this instanceof java.lang.ClassNotFoundException)
คุณสามารถเชื่อมโยงเงื่อนไขหลายอย่างเข้าด้วยกัน&&
ได้
ในIntelliJ IDEA 14ไปที่:
Run -> View Breakpoints -> Check "Java Exceptions Breakpoints" -> Uncheck "Caught Exceptions"
หากคุณไม่ยกเลิกCaught Exceptions
การเลือกการดำเนินการจะถูกหยุดทุกครั้งที่มีการJava Framework
โยนข้อยกเว้นภายใน
ใช่แล้ว คุณต้องกำหนดจุดพักข้อยกเว้น (อาจเป็น "ข้อยกเว้นใด ๆ ") ในกล่องโต้ตอบจุดพักใน IntelliJ IDEA
ข้อยกเว้นสามารถกรองตามเงื่อนไขหรือคลาสหากต้องการหรือไม่ว่าคุณจะสนใจในข้อยกเว้นที่ตรวจพบหรือไม่ได้ตรวจสอบ
หากคุณคลิกที่เครื่องหมาย "+" เล็ก ๆ ที่มุมซ้ายบนคุณสามารถเพิ่มเบรกพอยต์ใหม่ได้ หากคุณเลือก Exception Breakpoint คุณจะได้รับกล่องโต้ตอบเล็ก ๆ ที่คุณสามารถเข้าสู่คลาสยกเว้นเพื่อไปต่อได้ (ในกรณีที่คุณไม่ต้องการเจาะข้อยกเว้นทั้งหมด)
ในรุ่นใหม่บน IntelliJ ในภายใต้Run > ดูจุดพัก
จากนั้นตรวจสอบJava จุดพักข้อยกเว้น -> ข้อยกเว้นใด ๆ
วิธีที่ดีในการแก้ปัญหาข้อยกเว้นคือการใช้แพคเกจ app .*
หลักของคุณและบัตรเสริม วิธีนี้คุณจะข้ามข้อยกเว้นไลบรารีอื่น ๆ ทั้งหมดเนื่องจากส่วนใหญ่คุณกำลังมองหาข้อยกเว้นที่แอพของคุณโยนและไม่ได้มาจากไลบรารี่อื่น ๆ (ซึ่งอาจเป็นข้อยกเว้นจำนวนมาก)
ตัวอย่างที่แสดงในภาพที่ฉันใช้com.gs.mercury.*
เพื่อแยกทุกครั้งที่แอพมีข้อยกเว้น หากคุณใช้ข้อยกเว้นสำหรับสิ่งที่พวกเขามีไว้สำหรับ (เพื่อจัดการกับกรณีพิเศษและไม่ให้รับมือกับสถานการณ์ปกติ) คุณจะหยุดเมื่อคุณเข้าถึงข้อยกเว้นที่ต้องการเกือบตลอดเวลา
PD คำตอบเพิ่มเพียงเพื่อชี้ให้เห็นประโยชน์สวยกรองชั้นจับ