1. แหล่งที่มาของความผิดปกติ
ในแอปพลิเคชันของ Delphi สถานการณ์ต่อไปนี้มีแนวโน้มที่จะสร้างข้อยกเว้น
(1) การประมวลผลไฟล์
(2) การจัดสรรหน่วยความจำ
(3) ทรัพยากร Windows
(4) สร้างวัตถุและแบบฟอร์มในระหว่างการรันไทม์
(5) ความขัดแย้งของฮาร์ดแวร์และระบบปฏิบัติการ
-
2. การจัดการข้อยกเว้น
(1) ลอง … ยกเว้น … จบ ;
เมื่อมีข้อยกเว้นเกิดขึ้นในรหัสในร่างกายลองระบบจะเปลี่ยนเป็นส่วนยกเว้นสำหรับการประมวลผลข้อยกเว้น นี่เป็นหนึ่งในวิธีพื้นฐานที่สุดที่ Delphi จัดการข้อยกเว้น
-
(2) ลอง … ในที่สุด … จบ ;
โดยทั่วไปแล้วโครงสร้างการจัดการข้อยกเว้นนี้ใช้เพื่อ ปกป้อง การจัดสรรทรัพยากร Windows และด้านอื่น ๆ
ไม่เหมือนการลอง ... ยกเว้น ... จบส่วนหนึ่งของโครงสร้างจะถูกดำเนินการเสมอ
-
(3) ไม่มีการลอง ... ยกเว้น ... ในที่สุด ... โครงสร้างสิ้นสุดเพื่อจัดการกับข้อยกเว้นและปกป้องโครงสร้างการจัดสรรทรัพยากร ในที่สุด ... โครงสร้างสิ้นสุดจึงตระหนักถึงการจัดการข้อยกเว้นและปกป้องการจัดสรรทรัพยากร
-
-
3. การจัดการข้อยกเว้นที่แม่นยำ
(1) กำหนดข้อยกเว้น
ใน Delphi แต่ละข้อยกเว้นเป็นคลาสที่ได้รับ [2] ของ ข้อยกเว้น [1] คลาส ดังนั้นการกำหนดข้อยกเว้นคือการกำหนดคลาสที่ได้รับของคลาสข้อยกเว้น
พิมพ์ emyexception = คลาส (ข้อยกเว้น);
แน่นอนคลาสฐานอาจเป็นข้อยกเว้นหรือระดับใด ๆ ของข้อยกเว้น
-
(2) โยนข้อยกเว้นในโปรแกรม
การโยนข้อยกเว้นตามสถานการณ์ที่แตกต่างกันเป็นโหมดพื้นฐานที่สุดของการใช้ข้อยกเว้น ใน Delphi มันถูกนำไปใช้โดยคำสั่ง Raise
[ไวยากรณ์] เพิ่ม คลาสข้อยกเว้นสร้าง ('คำอธิบายเริ่มต้นของข้อยกเว้น');
-
(3) จับข้อยกเว้นได้อย่างแม่นยำมากขึ้นในการลอง ... ยกเว้น ... จบ
ใช้ ON : คลาส Exception Do ... โครงสร้างเพื่อจัดการกับข้อยกเว้นที่ถูกโยนโดยคลาสข้อยกเว้นเฉพาะในร่างกาย DO
-
4. ข้อยกเว้นการดีบัก
ใน Delphi IDE ให้ยกเลิกการตรวจสอบสถานะการตรวจสอบของช่องทำเครื่องหมายการดีบักแบบบูรณาการใน "ตัวเลือกดีบักเกอร์" (คุณสามารถใช้เครื่องมือเมนู -> ตัวเลือกดีบั๊กเกอร์ ... เพื่อเข้าถึง)
-
5. คำอธิบายเพิ่มเติมเกี่ยวกับความผิดปกติ
(1) ทุกโปรแกรมอาจสร้างข้อผิดพลาด! นี่เป็นปรากฏการณ์และกฎหมายที่ไม่อาจปฏิเสธได้ในอุตสาหกรรมซอฟต์แวร์ ในความเป็นจริงถ้า ... อื่น ๆ ... โครงสร้างสามารถแก้ไขข้อผิดพลาดทั้งหมดได้อย่างสมบูรณ์
คำตอบนั้นชัดเจน: ข้อยกเว้นให้วิธีที่ยืดหยุ่นและเปิดกว้างมากขึ้นทำให้โปรแกรมเมอร์ในภายหลังสามารถจัดการกับข้อผิดพลาดนี้ได้ตามเงื่อนไขจริงแทนที่จะใช้ผลการประมวลผลล่วงหน้า อันที่จริงฉันคิดว่านี่เป็นแกนหลักของกลไกข้อยกเว้น
[1] คำจำกัดความของคลาสข้อยกเว้นอยู่ในหน่วย sysutils
[2] Delphi ยังรองรับคลาสข้อยกเว้นที่ไม่ได้รับมรดกจากข้อยกเว้น แต่ฉันไม่คิดว่ามันจะฉลาดมากที่จะทำเช่นนั้น