ในการเขียนโปรแกรมคอมพิวเตอร์นั้นจะต้องมีข้อผิดพลาดเกิดขึ้นบ้าง ถ้าหากเป็นข้อผิดพลาดที่เกิดเนื่องจากการเขียนโปรแกรม เช่น เขียนโปรแกรมผิดหลักโครงสร้าง หรือเขียนคำสั่งต่างๆ ผิดตัวคอมไพเลอร์ก็จะแจ้งข้อผิดพลาดออกมาทันที ผู้เขียนโปรแกรมจะต้องแก้ไขก่อนจึงจะนำโปรแกรมไปใช้งานต่อไปได้ สำหรับข้อผิดพลาดบางประเภทอาจเกิดขึ้นระหว่างการรันโปรแกรม (Run-TimeError) ข้อผิดพลาดนี้ผู้เขียนโปรแกรมอาจละทิ้งไปได้ ไม่สนใจก็ได้ แต่ก็จะทำให้โปรแกรมทำงานไม่ถูกต้องเสมอไป ถูกบ้าง ไม่ถูกบ้าง ดังนั้นการเขียนโปรแกรมที่ดีผู้เขียนโปรแกรมเอง จะต้องเขียนโปรแกรมเพื่อดักจับข้อผิดพลาดนั้น หรือเขียนโปรแกรมเตือนให้ผู้ใช้ทราบว่าโปรแกรมกำลังทำงานผิดพลาด เครื่องมือชิ้นหนึ่งที่ช่วยหาข้อผิดพลาดของโปรแกรมได้ คือ Debugging Tools การใช้เครื่องมือต่างๆ อาจเลือกจากเมนู Debug โดยตรง หรือเลือกทางปุ่มบนทูลบาร์ Debug ก็ได้ (ถ้าหากหาทูลบาร์ Debug ไม่พบให้เลือกเมนู View>Toolbars>Debug) ซึ่งจะมีปุ่มสำหรับช่วยในการหาข้อผิดพลาดของโปรแกรม โดยปุ่มที่นิยมใช้ ได้แก่ การตั้ง Break Point และ Step Info การตั้ง Break Point เป็นวิธีตรวจสอบการทำงานขั้นพื้นฐานวิธีหนึ่งโดยจะให้โปรแกรมหยุดทำงานในตำแหน่งคำสั่งที่กำหนด จากโปรแกรมดังรูปด้านล่าง ถ้าหากต้องการกำหนดจุด Break Point ที่จุดใดก็ให้นำเมาส์ไปคลิกที่แถบด้านซ้ายมือ โปรแกรมก็จะหยุดในตำแหน่งที่กำหนดเอาไว้ ในการกำหนดจุด Break Point นี้สามารถกำหนดได้มากกว่าหนึ่งจุด และถ้าหากต้องการยกเลิกจุดใดก็ทำได้โดยคลิกเมาส์ขวาที่จุดนั้นแล้วเลือกยกเลิก Break Point การกำหนดจุด Break Point นี้จะทำให้เราสามารถสังเกตผลลัพธ์จากการทำงานของโปรแกรมก่อนถึงจุดที่กำหนดได้ สำหรับการทดสอบการทำงานทีละคำสั่งสามารถเลือกได้จาก Step Info หรือกดคีย์ลัด <F8> โปรแกรมก็จะทำงานทีละคำสั่ง ตั้งแต่คำสั่งแรกสุดไล่ไปเรื่อยๆ และเมื่อทำงานมาถึงคำสั่งใด โปรแกรมจะแสดงแถบสีเหลืองที่คำสั่งนั้น และมีลูกศรชี้ที่หน้าคำสั่งด้วย ในการทดสอบการทำงานของโปรแกรมทีละคำสั่ง หากต้องการทราบค่าของตัวแปรตัวใดให้นำเมาส์ไปชี้ที่ตัวแปรที่สนใจ โปรแกรมจะแสดงค่าของตัวแปรนั้นออกมา ตัวอย่างเช่นโปรแกรมนี้เป็นการค่าผลบวกตั้งแต่ 1 ถึง 10 โดยใช้ตัวแปร I เป็นตัวนับ และใช้ตัวแปร Sum เก็บผลลัพธ์ ถ้าหากต้องการทราบค่าตัวแปร I แล้วนำเมาส์ไปคลิกที่ I โปรแกรมจะแสดงผลออกมาดังนี้ ถ้าหากกดคีย์ <F8> ไปเรื่อยๆ โปรแกรมจะแสดงค่าที่เปลี่ยนไปด้วย ถ้าหากต้องการให้แสดงค่าตัวแปรอย่างถาวร สามารถคลิกที่ปุ่มปักหมุนได้ โปรแกรมจะแสดงผลดังรูป ถ้าหากต้องการแสดงตัวแปรอื่นด้วยก็ทำได้เช่นกัน จากรูปเป็นการแสดงตัวแปร Sum และ I และเมื่อรันโปรแกรมไปเรื่อยๆ ค่าของตัวแปรก็จะเปลี่ยนไปด้วย วิธีการนี้ทำให้ผู้เขียนโปรแกรมทราบค่าตัวแปรที่สนใจขณะที่โปรแกรมทำงานได้ ทำให้หาข้อผิดพลาดของโปรแกรมได้ง่ายขึ้น ถ้าหากต้องการให้โปรแกรมแสดงผลค่าของตัวแปรทุกตัวออกมาทางหน้าต่างก็ทำได้เช่นกันโดยคลิกที่ปุ่ม Locals โปรแกรมจะแสดงผลตารางทางด้านล่าง ดังรูป สำหรับในหัวข้อนี้จะกล่าวถึงรายละเอียดของข้อผิดพลาดทุกประเภทที่จะพบในระหว่างการเขียนโปรแกรม รวมทั้งวิธีการแก้ไขให้โปรแกรมทำงานได้ถูกต้อง และสุดท้ายจะกล่าวถึงวิธีการต่างๆที่ VB ช่วยให้เราจัดการกับข้อผิดพลาดประเภทต่างๆ ที่เกิดขึ้นได้สะดวกยิ่งขึ้น ชนิดข้อผิดพลาด ก่อนเริ่มต้นจัดการข้อผิดพลาด เราควรรู้จักว่าข้อผิดพลาดของ VB เสียก่อน ซึ่งมีอยู่ 3 ประเภทคือ
จากการเขียนโปรแกรมข้างต้น เมื่อเราทำการคอมไพล์โปรแกรมจะปรากฏข้อผิดพลาดนี้เกิดจากการป้อนคำสั่งที่ผิดรูปแบบจาก To เป็น Too นอกจากนี้ถ้าหากเป็นตัวแปร หรือคำใดที่โปรแกรมไม่รู้จักโปรแกรมจะแสดงเครื่องหมายแจ้งเตือนออกมาด้วย 2. ข้อผิดพลาดขณะรันโปรแกรม (Runtime Error) จากตัวอย่างที่เขียนขึ้น เมื่อคอมไพล์ผ่าน แต่เมื่อรันโปรแกรมและคลิกปุ่ม Button1 โปรแกรมจะทำงานจนถึงตำแหน่งดังกล่าว แล้วจะเกิดข้อผิดพลาด (Error) ขึ้น เนื่องจากโปรแกรมหาไฟล์ในตำแหน่งที่ระบุไว้ไม่พบ และโปรแกรมจะแจ้งข้อผิดพลาดออกมา 3. ข้อผิดพลาดจากลอจิกของโปรแกรมผิดพลาด (Logic Error)
คำสั่งประเภทนี้จะใช้ในการแก้ไขปัญหาข้อผิดพลาดในขณะรันโปรแกรม (Runtime Error) เพราะจะช่วยให้โปรแกรมทำงานต่อได้ เช่น เราเขียนโปรแกรมเปิดไฟล์ถ้าโปรแกรมหาไฟล์นั้นไม่พบโปรแกรมจะหยุดทำงานและแจ้งข้อผิดพลาดนั้นออกมา แต่ถ้าใช้คำสั่งจัดการข้อผิดพลาด โปรแกรมจะทำงานต่อโดยไม่หยุด ทำให้เราสามารถใช้งานส่วนอื่นๆ ได้ต่อไป ยกเว้นส่วนที่เกิดข้อผิดพลาด
ในการเขียนโปรแกรม VB นั้น ในโปรแกรมย่อยหนึ่ง จะสามารถมี Structured หรือ Unstructured Exception Handling อย่างใดอย่างหนึ่งเท่านั้น ไม่สามารถมีทั้งสองอย่างพร้อมกันได้ การจัดการข้อผิดพลาดแบบ Unstructured Exception Handling การจัดการข้อผิดพลาดโดยใช้คำสั่ง Unstructured Exception Handling ที่ใช้จัดการกับข้อผิดพลาดในขณะรันโปรแกรม เช่น การถูกหารด้วยศูนย์ การหาไฟล์ไม่พบคำสั่งที่ใช้คือ คำสั่ง On Error ซึ่งเป็นคำสั่งที่มีความหมายว่า ถ้าเกิดข้อผิดพลาดขึ้นมาจะให้ไปทำคำสั่งใดต่อไป โดยคำสั่งนี้จะมีอยู่ 3 รูปแบบ คือ
คำสั่ง On Error Goto [LineNumber] คำสั่งนี้จะเป็นการบอกว่า เมื่อเกิดข้อผิดพลาดในโปรแกรมจะให้ไปที่บรรทัดที่เท่าไหร่ในโปรแกรมย่อยนั้น โดยอาจกำหนดตำแหน่งที่ต้องการไปเป็นชื่อเลเบลก็ได้ โดยชื่อของเลเบลจะประกอบด้วยตัวอักษรในภาษาอังกฤษ หรือตัวเลข ตามด้วยเครื่องหมายโคลอน (:) ตัวอย่างเช่น จากตัวอย่างเป็นการเขียนโปรแกรมย่อยอีเวนต์ของปุ่มกดบนฟอร์ม เมื่อรันโปรแกรมแล้วคลิกปุ่มกดเมื่อโปรแกรมทำงานจะพบว่ามีการเขียนโปรแกรมให้ตัวแปร P ถูกหารด้วยค่าศูนย์ ทำให้เกิดข้อผิดพลาดขึ้นในส่วนนี้ การเขียนคำว่า On Error Goto Err_Handler จะเป็นการบอกว่าถ้าหากมีข้อผิดพลาดเกิดขึ้นให้กระโดดไปที่บรรทัดที่เขียนเลเบลเป็น Err_Handler ดังนั้นเมื่อรันโปรแกรมแล้วคลิกปุ่มกดจะให้โปรแกรมแสดงไดอะล็อกซ์บ็อกซ์แจ้งข้อผิดพลาดเป็น Divide By Zero ออกมา ผลลัพธ์ของโปรแกรมเป็นดังนี้ จากโปรแกรมให้ทดลองเปลี่ยนค่าในตัวแปร Q จะพบว่าไม่มีข้อผิดพลาดเกิดขึ้น หรือให้ลองใส่เครื่องหมาย Comment หน้าบรรทัด On Error GoTo แล้วรันโปรแกรม เปรียบเทียบผลลัพธ์ที่ได้จะพบว่ามีการแจ้งข้อผิดพลาดเกิดขึ้นในบรรทัดที่ถูกหารด้วยศูนย์ คำสั่ง On Error Resume Next เมื่อเกิดข้อผิดพลาดในโปรแกรม ถ้าหากเราใส่คำสั่ง On Error Resume Next จะทำให้โปรแกรมข้ามคำสั่งที่เกิดข้อผิดพลาดไปทำยังคำสั่งต่อไปทันที ดังตัวอย่างต่อไปนี้ จากตัวอย่างข้างต้น เมื่อถึงบรรทัดที่มีคำสั่ง M = P/Q ซึ่งเป็นการหารด้วยศูนย์ โปรแกรมจะข้ามไปทำงานยังคำสั่งต่อไปทันที คำสั่ง On Error Goto 0 คำสั่ง On Error Goto 0 เป็นการยกเลิก (Disable) การจัดการข้อผิดพลาดต่างๆที่เราเตรียมไว้ โปรแกรมจะหยุดทำงานทันทีและแจ้งข้อผิดพลาดเมื่อพบคำสั่งที่มีปัญหา เราจะใช้คำสั่งนี้ในตอนที่เราต้องการแก้โปรแกรมหาจุดผิด และต้องการดูว่าบรรทัดใดคือบรรทัดที่มีปัญหาเกิดขึ้น จากตัวอย่างข้างต้น เมื่อโปรแกรมทำงานถึงบรรทัดที่มีคำสั่ง M = P/Q จะเกิดข้อผิดพลาด ขอบเขตคำสั่งของ On Error ในการเขียนโปรแกรมนั้นเราสามารถใช้คำสั่ง On Error ตรวจสอบข้อผิดพลาดหลายๆ ช่วงได้ขอบเขตคำสั่งของ On Error จะมีผลสืบเนื่องจนกว่าจะพบคำสั่ง On Error ตัวถัดไป ดังตัวอย่างต่อไปนี้ จากโค้ดข้างต้นเมื่อโปรแกรมทำงานจนถึงที่เกิดข้อผิดพลาดที่ 1 โปรแกรมจะกระโดดมาทำในส่วนของเลเบล Err_Handler เนื่องจากก่อนหน้านั้นมีการกำหนดคำสั่ง On Error ให้กระโดดมาทำงานที่ส่วนนี้เมื่อเกิดข้อผิดพลาด เมื่อทำงานในส่วนของ Err_Handler โปรแกรมจะแสดงคำว่า “in Err_handler” จากนั้นจะทำคำสั่ง Resume Next ซึ่งจะทำให้การทำงานกลับไปทำงานที่คำสั่งถัดจากคำสั่งที่เกิดข้อผิดพลาด ทำให้โปรแกรมแสดงคำว่า “On Error Goto Err_Handler” คำสั่งแก้ไขข้อผิดพลาด เมื่อโปรแกรมตรวจพบข้อผิดพลาดขณะรันโปรแกรม (Runtime Error) และเราได้ใส่คำสั่งจัดการข้อผิดพลาดแล้ว ส่วนต่อไปที่เราต้องทำก็คือการเขียนคำสั่งแกไขปัญหาที่เกิดขึ้น เช่น กรณีที่หาไฟล์ไม่พบ ไฟล์ถูกลบไปแล้ว เราก็เพิ่มส่วนในการสร้างไฟล์ที่ต้องการ จากนั้นก็ใช้คำสั่ง Resume Next เพื่อกลับไปทำคำสั่งต่อไป ต่อจากคำสั่งที่มีปัญหา สำหรับคำสั่ง Resume มีวีธีใช้งานหลายวิธีดังนี้
ตัวอย่างการใช้ Resume ตัวอย่างโปรแกรมนี้จะแสดงการใช้คำสั่ง Resume และ Resume Next โดยโปรแกรมจะให้ผลลัพธ์การทำงานไม่เหมือนกันสำหรับแต่ละตัวเลือก ดังรูป ขั้นตอนการพัฒนาโปรแกรมทำได้ดังนี้
2. เขียนโปรแกรมให้กับอีเวนต์ของปุ่มกดดังนี้ 3. เมื่อรันโปรแกรมจะให้เราเลือกว่า จะใช้คำสั่ง Resume หรือ Resume Next ซึ่งจะได้ผลลัพธ์ในแต่ละตัวเลือกดังต่อไปนี้
ออบเจ็กต์สำหรับจัดการข้อผิดพลาด (ErrObject) ในการเขียนโปรแกรมด้วย VB จะมีออบเจ็กต์ Err (Microsoft.VisualBasic.ErrObject) ซึ่งเป็นออบเจ็กต์ที่มีอยู่แล้วในระบบ เราไม่ต้องประกาศ ออกเจ็กต์นี้เป็นออบเจ็กต์ที่ใช้ในการเก็บข้อมูลของข้อผิดพลาดที่เกิดขึ้นขณะรันโปรแกรม (Runtime Error) เช่น สาเหตุที่เกิดข้อผิดพลาดซึ่งจะทำให้เราทราบถึงความบกพร่องของโค้ดโปรแกรม และสามารถเดาได้ถึงตำแหน่งที่ผิดของโค้ดโปรแกรมของเราได้ในออบเจ็กต์ Err มีเมธอดและคุณสมบัติที่น่าสนใจดังต่อไปนี้ คุณสมบัติ
พิจารณาตัวอย่างการใช้งานต่อไปนี้ โดยเพิ่มคำสั่งนี้ลงไปในตัวอย่างที่ผ่านมา โดยเขียนไว้ก่อนหน้าคำสั่ง Resume ตัวอย่างแสดงการใช้ออบเจ็กต์ ErrObject ตัวอย่างโปรแกรมต่อไปนี้จะแสดงการใช้งานออบเจ็กต์ Err โดยจะให้เราใส่ค่าคุณสมบัติ Number ลงไป แล้วคลิกปุ่ม Generate Error ก็จะปรากฏไดอะล็อกแสดงข้อผิดพลาดที่ตรงกับคุณสมบัติ Number ที่เราใส่เข้าไป ดังรูป |