อ่าน 5 นาที
การจัดการข้อยกเว้น
ใน ด้านการคำนวณ และ การเขียน โปรแกรม คอมพิวเตอร์ การจัดการข้อยกเว้น คือกระบวนการตอบสนองต่อการเกิด ข้อยกเว้น ซึ่งเป็นสภาวะผิดปกติหรือพิเศษที่ต้องได้รับการประมวลผลเป็นพิเศษ...
การจัดการข้อยกเว้น
ในด้านการคำนวณและ การเขียน โปรแกรมคอมพิวเตอร์การจัดการข้อยกเว้นคือกระบวนการตอบสนองต่อการเกิดข้อยกเว้นซึ่งเป็นสภาวะผิดปกติหรือพิเศษที่ต้องได้รับการประมวลผลเป็นพิเศษ ในระหว่างการทำงานของโปรแกรมโดยทั่วไปแล้ว ข้อยกเว้นจะหยุดการทำงานตามปกติและเรียกใช้ตัวจัดการข้อยกเว้น ที่ลงทะเบียนไว้ล่วงหน้า รายละเอียดของวิธีการดำเนินการนั้นขึ้นอยู่กับว่าเป็น ข้อยกเว้น ของฮาร์ดแวร์หรือซอฟต์แวร์และวิธีการใช้งานข้อยกเว้นของซอฟต์แวร์
ข้อยกเว้นถูกกำหนดโดยชั้นต่างๆ ของระบบคอมพิวเตอร์ และชั้นทั่วไปได้แก่การขัดจังหวะที่กำหนดโดยCPU สัญญาณที่ กำหนดโดย ระบบปฏิบัติการ (OS) และ ข้อยกเว้นที่กำหนดโดย ภาษาโปรแกรมแต่ละชั้นต้องการวิธีการจัดการข้อยกเว้นที่แตกต่างกัน แม้ว่าอาจมีความสัมพันธ์กัน เช่น การขัดจังหวะของ CPU อาจถูกแปลงเป็นสัญญาณของระบบปฏิบัติการ ข้อยกเว้นบางอย่าง โดยเฉพาะอย่างยิ่งข้อยกเว้นด้านฮาร์ดแวร์ อาจได้รับการจัดการอย่างราบรื่นจนการทำงานสามารถกลับมาดำเนินการต่อจากจุดที่หยุดไป
คำนิยาม
นิยามของข้อยกเว้นนั้นอิงตามการสังเกตว่าแต่ละขั้นตอนมีเงื่อนไขเบื้องต้นซึ่งเป็นชุดของสถานการณ์ที่จะทำให้ขั้นตอนนั้นสิ้นสุดลง "ตามปกติ" [ 1 ]กลไกการจัดการข้อยกเว้นช่วยให้ขั้นตอนสามารถยกข้อยกเว้น[ 2 ] ได้ หากเงื่อนไขเบื้องต้นนี้ถูกละเมิด[ 1 ]ตัวอย่างเช่น หากขั้นตอนถูกเรียกใช้ด้วยชุดอาร์กิวเมนต์ที่ผิดปกติ จากนั้นกลไกการจัดการข้อยกเว้นจะจัดการกับข้อยกเว้นนั้น[ 3 ]
เงื่อนไขเบื้องต้นและคำจำกัดความของข้อยกเว้นเป็นเรื่องอัตวิสัย ชุดของสถานการณ์ "ปกติ" ถูกกำหนดโดยโปรแกรมเมอร์ทั้งหมด เช่น โปรแกรมเมอร์อาจถือว่าการหารด้วยศูนย์ไม่นิยาม ดังนั้นจึงเป็นข้อยกเว้น หรือคิดค้นพฤติกรรมบางอย่าง เช่น การส่งคืนค่าศูนย์หรือค่า "ZERO DIVIDE" พิเศษ (เพื่อหลีกเลี่ยงความจำเป็นในการใช้ข้อยกเว้น) [ 4 ]ข้อยกเว้นทั่วไป ได้แก่ อาร์กิวเมนต์ที่ไม่ถูกต้อง (เช่น ค่าอยู่นอกขอบเขตของฟังก์ชัน ) [ 5 ]ทรัพยากรไม่พร้อมใช้งาน (เช่น ไฟล์หายไป[ 6 ]ข้อผิดพลาดของไดรฟ์เครือข่าย[ 7 ]หรือข้อผิดพลาดหน่วยความจำไม่เพียงพอ[ 8 ] ) หรือรูทีนตรวจพบสภาวะปกติที่ต้องได้รับการจัดการเป็นพิเศษ เช่น ความสนใจ สิ้นสุดไฟล์[ 9 ]แรงกดดันทางสังคมมีอิทธิพลอย่างมากต่อขอบเขตของข้อยกเว้นและการใช้กลไกการจัดการข้อยกเว้น เช่น "ตัวอย่างการใช้งาน ซึ่งโดยทั่วไปจะพบได้ในไลบรารีหลัก และตัวอย่างโค้ดในหนังสือทางเทคนิค บทความในนิตยสาร และฟอรัมสนทนาออนไลน์ และในมาตรฐานโค้ดขององค์กร" [ 10 ]
การจัดการข้อยกเว้นช่วยแก้ปัญหาเซมิเพรดิเคทได้เนื่องจากกลไกนี้แยกแยะค่าส่งคืนปกติออกจากค่าที่ผิดพลาด ในภาษาที่ไม่มีการจัดการข้อยกเว้นในตัว เช่น C รูทีนจะต้องส่งสัญญาณข้อผิดพลาดด้วยวิธีอื่น เช่นรหัสส่งคืน ทั่วไป และรูปแบบerrno [ 11 ]เมื่อพิจารณาในมุมกว้าง ข้อผิดพลาดสามารถถือได้ว่าเป็นส่วนย่อยที่เหมาะสมของข้อยกเว้น[ 12 ]และกลไกข้อผิดพลาดที่ชัดเจน เช่น errno สามารถถือได้ว่าเป็นรูปแบบ (ละเอียด) ของการจัดการข้อยกเว้น[ 11 ]คำว่า "ข้อยกเว้น" เป็นที่นิยมมากกว่า "ข้อผิดพลาด" เพราะไม่ได้หมายความว่ามีสิ่งใดผิดปกติ - เงื่อนไขที่ขั้นตอนหรือโปรแกรมเมอร์คนหนึ่งมองว่าเป็นข้อผิดพลาด อาจไม่ได้ถูกมองเช่นนั้นโดยคนอื่น[ 13 ]
คำว่า "ข้อยกเว้น" อาจทำให้เข้าใจผิดได้ เพราะความหมายโดยนัยของคำว่า "ความผิดปกติ" บ่งชี้ว่าการยกข้อยกเว้นนั้นผิดปกติหรือไม่ธรรมดา[ 14 ]ในขณะที่ความจริงแล้วการยกข้อยกเว้นอาจเป็นสถานการณ์ปกติและธรรมดาในโปรแกรม[ 13 ]ตัวอย่างเช่น สมมติว่าฟังก์ชันค้นหาสำหรับอาร์เรย์แบบเชื่อมโยงจะโยนข้อยกเว้นหากคีย์ไม่มีค่าที่เกี่ยวข้อง ขึ้นอยู่กับบริบท ข้อยกเว้น "คีย์หายไป" นี้อาจเกิดขึ้นบ่อยกว่าการค้นหาที่สำเร็จมาก[ 15 ]
ประวัติศาสตร์
การจัดการข้อยกเว้นฮาร์ดแวร์ครั้งแรกพบในUNIVAC Iตั้งแต่ปี 1951 การโอเวอร์โฟลว์ทางคณิตศาสตร์จะดำเนินการคำสั่งสองคำสั่งที่แอดเดรส 0 ซึ่งสามารถถ่ายโอนการควบคุมหรือแก้ไขผลลัพธ์ได้[ 16 ] การจัดการข้อยกเว้นซอฟต์แวร์ได้รับการพัฒนาในช่วงทศวรรษ 1960 และ 1970 ต่อมาการจัดการข้อยกเว้นได้รับการนำไปใช้อย่างกว้างขวางในภาษาโปรแกรมหลายภาษาตั้งแต่ทศวรรษ 1980 เป็นต้นไป
ข้อผิดพลาดของฮาร์ดแวร์
ไม่มีข้อตกลงที่ชัดเจนเกี่ยวกับความหมายที่แน่นอนของข้อยกเว้นในส่วนที่เกี่ยวกับฮาร์ดแวร์[ 17 ]จากมุมมองของการใช้งาน จะได้รับการจัดการเหมือนกับการขัดจังหวะ กล่าวคือ โปรเซสเซอร์จะหยุดการทำงานของโปรแกรมปัจจุบัน ค้นหาตัวจัดการการขัดจังหวะในตารางเวกเตอร์การขัดจังหวะสำหรับข้อยกเว้นหรือเงื่อนไขการขัดจังหวะนั้น บันทึกสถานะ และสลับการควบคุม
ข้อยกเว้นจุดลอยตัว IEEE 754
การจัดการข้อยกเว้นใน มาตรฐาน เลขทศลอยIEEE 754 โดยทั่วไปหมายถึงสภาวะผิดปกติ และกำหนดนิยามของข้อยกเว้นว่า "เหตุการณ์ที่เกิดขึ้นเมื่อการดำเนินการกับตัวถูกดำเนินการบางตัวไม่มีผลลัพธ์ที่เหมาะสมสำหรับทุกการใช้งานที่สมเหตุสมผล การดำเนินการนั้นอาจส่งสัญญาณข้อยกเว้นอย่างน้อยหนึ่งรายการโดยการเรียกใช้การจัดการเริ่มต้น หรือหากมีการร้องขออย่างชัดเจน การจัดการทางเลือกที่กำหนดโดยภาษา"
โดยค่าเริ่มต้น ข้อยกเว้น IEEE 754 สามารถดำเนินการต่อได้และจัดการโดยการแทนที่ค่าที่กำหนดไว้ล่วงหน้าสำหรับข้อยกเว้นต่างๆ เช่น ค่าอนันต์สำหรับข้อยกเว้นการหารด้วยศูนย์ และจัดเตรียมแฟล็กสถานะสำหรับการตรวจสอบในภายหลังว่าเกิดข้อยกเว้นขึ้นหรือไม่ (ดูการแก้ไขภาษา C C99สำหรับตัวอย่างทั่วไปของการจัดการข้อยกเว้น IEEE 754) รูปแบบการจัดการข้อยกเว้นที่เปิดใช้งานโดยการใช้แฟล็กสถานะประกอบด้วย: ขั้นแรกคำนวณนิพจน์โดยใช้การใช้งานที่รวดเร็วและตรงไปตรงมา ตรวจสอบว่าล้มเหลวหรือไม่โดยการทดสอบแฟล็กสถานะ และจากนั้น หากจำเป็น ให้เรียกใช้การใช้งานที่ช้ากว่าแต่มีความทนทานต่อตัวเลขมากกว่า[ 18 ]
มาตรฐาน IEEE 754 ใช้คำว่า "trapping" เพื่ออ้างถึงการเรียกใช้รูทีนการจัดการข้อยกเว้นที่ผู้ใช้กำหนดไว้เมื่อเกิดเงื่อนไขพิเศษ และเป็นคุณลักษณะเสริมของมาตรฐาน มาตรฐานแนะนำสถานการณ์การใช้งานหลายอย่างสำหรับสิ่งนี้ รวมถึงการใช้งานการแทนที่ค่าล่วงหน้าที่ไม่ใช่ค่าเริ่มต้นตามด้วยการดำเนินการต่อ เพื่อจัดการกับความผิดปกติที่กำจัดได้แบบ กระชับ [ 18 ] [ 19 ] [ 20 ]
พฤติกรรมการจัดการข้อยกเว้น IEEE 754 ตามค่าเริ่มต้นของการดำเนินการต่อหลังจากการแทนที่ค่าเริ่มต้นช่วยหลีกเลี่ยงความเสี่ยงที่เกิดขึ้นจากการเปลี่ยนแปลงการไหลของการควบคุมโปรแกรมเมื่อเกิดข้อยกเว้นทางตัวเลข ตัวอย่างเช่น การ ปล่อยยาน อวกาศคลัสเตอร์ ในปี 1996 จบลงด้วยการระเบิดครั้งใหญ่ ซึ่งส่วนหนึ่งเป็นผลมาจาก นโยบายการจัดการข้อยกเว้นของ Adaที่ยกเลิกการคำนวณเมื่อเกิดข้อผิดพลาดทางคณิตศาสตร์วิลเลียม คาฮานอ้างว่าพฤติกรรมการจัดการข้อยกเว้น IEEE 754 ตามค่าเริ่มต้นจะช่วยป้องกันเหตุการณ์นี้ได้[ 19 ]
ในภาษาโปรแกรม
ในการเขียนโปรแกรมคอมพิวเตอร์ มีกลไก ภาษาโปรแกรมหลายอย่างสำหรับการจัดการข้อยกเว้นคำว่าข้อยกเว้นโดยทั่วไปใช้เพื่อหมายถึงโครงสร้างข้อมูลที่เก็บข้อมูลเกี่ยวกับสภาวะผิดปกติ กลไกหนึ่งในการถ่ายโอนการควบคุมหรือยกข้อยกเว้นขึ้นมาเรียกว่าthrow ; กล่าวคือ ข้อยกเว้นถูกthrownการทำงานจะถูกส่งต่อไปยัง catch
ในส่วนติดต่อผู้ใช้
เฟรมเวิร์ก การพัฒนาเว็บฝั่งหน้าบ้านเช่นReactและVueได้นำกลไกการจัดการข้อผิดพลาดมาใช้ โดยข้อผิดพลาดจะแพร่กระจายขึ้นไปตาม ลำดับชั้นของส่วนประกอบ ส่วนติดต่อผู้ใช้ (UI) ในลักษณะที่คล้ายคลึงกับวิธีที่ข้อผิดพลาดแพร่กระจายขึ้นไปตามสแต็กการเรียกในโค้ดที่กำลังดำเนินการ[ 21 ] [ 22 ]ในที่นี้ กลไกขอบเขตข้อผิดพลาดทำหน้าที่คล้ายกับกลไก try-catch ทั่วไป ดังนั้นส่วนประกอบจึงสามารถมั่นใจได้ว่าข้อผิดพลาดจากส่วนประกอบย่อยจะถูกดักจับและจัดการ และจะไม่แพร่กระจายขึ้นไปยังส่วนประกอบหลัก
ตัวอย่างเช่น ในVue.jsคอมโพเนนต์จะดักจับข้อผิดพลาดโดยการใช้งานerrorCaptured
Vue.component('parent',{template: '<div><slot></slot></div>',errorCaptured:(err,vm,info)=>alert('An error occurred');})Vue.component('child',{template: '<div>{{cause_error()}}</div>'})
เมื่อใช้ในรูปแบบนี้ในมาร์กอัป:
< ผู้ปกครอง> < บุตร> ></ บุตร> </ ผู้ปกครอง>ข้อผิดพลาดที่เกิดจากส่วนประกอบย่อยจะถูกตรวจจับและจัดการโดยส่วนประกอบหลัก[ 23 ]
ดูเพิ่มเติม
สรุปเนื้อหา
ข้อมูลสำคัญจากบทความ
ข้อมูลสำคัญเกี่ยวกับ การจัดการข้อยกเว้น
ใน ด้านการคำนวณ และ การเขียน โปรแกรม คอมพิวเตอร์ การจัดการข้อยกเว้น คือกระบวนการตอบสนองต่อการเกิด ข้อยกเว้น ซึ่งเป็นสภาวะผิดปกติหรือพิเศษที่ต้องได้รับการประมวลผลเป็นพิเศษ...
คำนิยาม
นิยามของข้อยกเว้นนั้นอิงตามการสังเกตว่าแต่ละ ขั้นตอน มี เงื่อนไขเบื้องต้น ซึ่งเป็นชุดของสถานการณ์ที่จะทำให้ขั้นตอนนั้นสิ้นสุดลง "ตามปกติ" [ 1 ] กลไกการจัดการข้อยกเว้นช่วยให้ขั้นตอนสามารถ ยกข้อยกเว้น [ 2 ] ได้ หากเงื่อนไขเบื้องต้นนี้ถูกละเมิด [ 1 ]...
ประวัติศาสตร์
การจัดการข้อยกเว้นฮาร์ดแวร์ครั้งแรกพบใน UNIVAC I ตั้งแต่ปี 1951 การโอเวอร์โฟลว์ทางคณิตศาสตร์จะดำเนินการคำสั่งสองคำสั่งที่แอดเดรส 0 ซึ่งสามารถถ่ายโอนการควบคุมหรือแก้ไขผลลัพธ์ได้ [ 16 ] การจัดการข้อยกเว้นซอฟต์แวร์ได้รับการพัฒนาในช่วงทศวรรษ 1960 และ 1970...
ข้อผิดพลาดของฮาร์ดแวร์
ไม่มีข้อตกลงที่ชัดเจนเกี่ยวกับความหมายที่แน่นอนของข้อยกเว้นในส่วนที่เกี่ยวกับฮาร์ดแวร์ [ 17 ] จากมุมมองของการใช้งาน จะได้รับการจัดการเหมือนกับ การขัดจังหวะ กล่าว คือ โปรเซสเซอร์จะหยุดการทำงานของโปรแกรมปัจจุบัน ค้นหาตัว จัดการการขัดจังหวะ ใน...