Runtime errors (ข้อผิดพลาดรันไทม์) ใน Windows เกิดมาตั้งแต่ระบบปฏิบัติการเริ่มมีอยู่ นี่เป็นข้อความข้อผิดพลาทั่วไปที่เห็นเมื่อแอปพลิเคชันล้มเหลว (crash) แต่ runtime error คืออะไร بالضبط และคุณสามารถทำอะไรได้บ้าง?
การพัฒนาซอฟต์แวร์เป็นเรื่องซับซ้อน และแอปพลิเคชันสมัยใหม่พึ่งพาไลบรารีและข้อมูลสนับสนุนที่ซับซ้อนเพื่อทำงานตามที่คาดหวัง คู่มือนี้จะช่วยให้คุณเข้าใจว่าทำไม runtime errors ถึงเกิดขึ้นและวิธีลดลงให้น้อยที่สุด
Runtime Error คืออะไร?
คำว่า "runtime error" หมายถึงข้อผิดพลาดของแอปพลิเคชันใดๆ เมื่อโปรแกรมกำลังถูกดำเนินการ (executed) กล่าวคือ มันเกิดขึ้นกับโปรแกรมที่กำลังทำงานอยู่ นี่ตรงข้ามกับข้อผิดพลาดที่เกิดขึ้นเมื่อโปรแกรมกำลังคอมไพล์ (compiling) การคอมไพล์คือกระบวนการนำโค้ดการเขียนโปรแกรม (โค้ด "source") ไปแปลงเป็นโค้ดไบนารีที่สามารถดำเนินการได้โดยระบบปฏิบัติการ หากส่วนใดส่วนหนึ่งของโค้ด source ไม่ถูกต้อง คอมไพเลอร์จะหยุดและให้ข้อความข้อผิดพลาด
Runtime errors เกิดขึ้นเมื่อ executable ที่คอมไพล์แล้วพบสถานการณ์ที่มันไม่รู้ว่าจะทำต่อไป หรือมีบางอย่างรบกวนการดำเนินการปกติของมัน ณ จุดนี้ มันจะทิ้งผ้าเช็ดหน้าและให้ runtime error
ประเภทต่างๆ ของ Runtime Error
เนื่องจาก runtime errors ถูกนิยามอย่างกว้างขวาง การแก้ไขปัญหาพวกมันจึงอาจลำบาก ช่วยได้หากเข้าใจว่าคุณอาจเจอประเภทข้อผิดพลาดทั่วไปอะไรบ้าง ห้าประเภทข้อผิดพลาดด้านล่างไม่ได้ครอบคลุมทุกอย่าง แต่เป็นผู้กระทำร้ายที่น่าจะเป็นไปได้มากที่สุด
Logic Errors (ข้อผิดพลาดตรรกะ)
Logic errors เกิดขึ้นเมื่อคอมพิวเตอร์เจอสิ่งที่ "คำนวณไม่ได้" โดยตรง นี่คือผลลัพธ์ที่สร้างโดยโค้ดของโปรแกรมที่ให้ผลลัพธ์ที่ไม่คาดคิด บางครั้งเป็นไปไม่ได้ เพราะตรรกะของโค้ดไม่ตรงกัน หรือโปรแกรมเมอร์ไม่ได้คาดการณ์ชุดเงื่อนไขหรืออินพุตเฉพาะ
Memory Leaks (รั่วของหน่วยความจำ)
Memory leak เกิดขึ้นเมื่อโปรแกรมไม่คืนหน่วยความจำที่มันขอหลังจากที่มันไม่ต้องการแล้ว ตามเวลา memory leaks ทำให้ทรัพยากรสำหรับโปรแกรมอื่นเหลือน้อยลง นำไปสู่ประสิทธิภาพที่ลดลง และในที่สุดก็ runtime errors นี่เป็นประเด็นน่าสนใจเพราะซอฟต์แวร์ที่รายงาน runtime error ปกติแล้วไม่ใช่ตัวที่มี memory leak มันเป็นเหยื่อของรั่วเท่านั้น
Dividing by Zero (การหารด้วยศูนย์)
เป็นไปไม่ได้ที่จะหารด้วยศูนย์ ดังนั้นเมื่อคอมพิวเตอร์ของคุณพยายามทำเช่นนั้น มันจะ/implode/ เข้าสู่หลุมดำ แค่เล่น! มันจะ crash โปรแกรมพร้อมกับ runtime error ที่กล่าวว่า "cannot divide by zero" (ไม่สามารถหารด้วยศูนย์ได้)
Undefined Objects (วัตถุที่ไม่ได้กำหนด)
ข้อผิดพลาดนี้มักเกี่ยวข้องกับ Java และ JavaScript โดยที่ตัวแปรที่ไม่ได้ถูกกำหนดค่าหรือไม่ได้ประกาศ กล่าวคือ ไม่มีข้อมูลในตัวแปร หรือโค้ดอ้างถึงตัวแปรที่ไม่มีอยู่ นั่นคือโปรแกรมเมอร์ทำผิดพลาดในบางอย่าง
IO Errors (ข้อผิดพลาด Input/Output)
IO หรือ Input/Output errors เกิดขึ้นเมื่อโปรแกรมพยายามอ่านหรือเขียนข้อมูลจากอุปกรณ์จัดเก็บและล้มเหลว สิ่งนี้อาจเกิดจากหลายเหตุผล ตั้งแต่ไดรฟ์ถูกถอดออก ไปจนถึงฮาร์ดดิสก์หรือฮาร์ดแวร์ USB ที่ผิดปกติ ดิสก์แสงที่มีรอยขีดข่วนเป็นสาเหตุทั่วไปอีกอย่างของ IO errors
ดังนั้นคุณเจอ runtime error และมันทำให้คุณผิดหวังเพราะคุณพยายามทำงานให้เสร็จ แม้เราจะได้กล่าวไว้ข้างต้นว่า runtime errors มีหลายประเภท และข้อผิดพลาดเฉพาะอาจบอกคุณได้ว่ามันเป็นประเภทไหน แต่มีวิธีแก้ไขทั่วไปบางอย่างที่อาจทำงานได้ไม่ว่ารายละเอียดจะเป็นอย่างไร
รีบูทคอมพิวเตอร์ของคุณ
การรีบูทคอมพิวเตอร์ของคุณอาจแก้ไขปัญหา memory leak หรือล้างแคชข้อมูลชั่วคราวหรือข้อมูลการทำงานอื่นๆ ที่อาจทำให้โปรแกรมหยุดทำงาน หากปัญหาหายไปหลังจากรีบูท มันไม่ช่วยให้ทราบสาเหตุ แต่สำหรับปัญหาที่เกิดขึ้นบางครั้ง การรีสตาร์ทเป็นวิธีแก้ไขที่รวดเร็ว
อัปเดตแอปพลิเคชัน
บ่อยครั้งกว่าที่จะไม่ Runtime errors ในซอฟต์แวร์เป็นผลมาจากบั๊กในซอฟต์แวร์เอง เมื่อนักพัฒนาซอฟต์แวร์ทราบบั๊กเหล่านี้ พวกเขามักจะแก้ไขปัญหาและปล่อยอัปเดตสำหรับแอปพลิเคชัน ดังนั้นหนึ่งในสิ่งแรกที่คุณควรทำคือตรวจสอบว่ามีอัปเดตสำหรับซอฟต์แวร์ของคุณหรือไม่
อาจสำคัญกว่านั้น เมื่อคุณเจอ Windows runtime error คุณควรรายงานให้กับนักพัฒนา บางครั้งมีปุ่มรายงานพร้อมกับข้อความข้อผิดพลาด บางครั้งคุณอาจต้องถ่ายภาพหน้าจอหรือจดรหัสข้อผิดพลาดแล้วติดต่อผ่านอีเมลหรือโซเชียลมีเดีย การรายงานบั๊กใหม่สามารถเร่งการได้รับการแก้ไข
อัปเดต Windows
Runtime errors อาจเกิดจากบั๊กหรือปัญหาอื่นๆ ใน Microsoft Windows เอง ซึ่งมักได้รับการแก้ไขใน Windows updates ปัญหาเล็กๆ มักได้รับการแก้ไขใน "hotfixes" ซึ่งเป็นอัปเดตเล็กๆ ที่แก้ไขปัญหาเฉพาะที่เร่งด่วน
ทางเลือกอื่น หากโปรแกรมเริ่มให้ runtime errors ทันทีหลังจาก Windows update คุณอาจต้องการลบอัปเดตล่าสุดจนกว่านักพัฒนาจะอัปเดตซอฟต์แวร์ของพวกเขา
อัปเดตไดรเวอร์ที่ล้าสมัยของคุณ
ไดรเวอร์คือซอฟต์แวร์ที่ให้ระบบปฏิบัติการควบคุมฮาร์ดแวร์ของคุณ เช่น display adapter (AKA การ์ดจอ) ซอฟต์แวร์ใหม่หรือซอฟต์แวร์ที่อัปเดตใหม่อาจพึ่งพาฟีเจอร์ที่มีอยู่เฉพาะในเวอร์ชันล่าสุดของไดรเวอร์ ดังนั้นเมื่อคุณอัปเดตไดรเวอร์สำหรับส่วนประกอบคอมพิวเตอร์ของคุณ คุณอาจแก้ไข runtime errors ที่เกี่ยวกับฮาร์ดแวร์ได้
ติดตั้งใหม่หรือซ่อมแซมแอปพลิเคชัน
Runtime errors อาจเป็นผลมาจากไฟล์แอปพลิเคชันหรือข้อมูลที่เสียหาย ดังนั้นเมื่อ executable ของโปรแกรมพยายามเข้าถึงข้อมูลที่มันต้องการเพื่อทำงาน มันจะเจอข้อผิดพลาดเพราะข้อมูลนั้นผิดหรือหายไป
ด้วยการถอนการติดตั้งแอปพลิเคชันและติดตั้งใหม่ คุณสามารถเขียนทับข้อมูลที่เสียหายด้วยสำเนาใหม่ คุณอาจไม่ต้องถอนการติดตั้งแอปพลิเคชันก่อน แอปมากมายจะเสนอตัวเลือก "repair" หรือ "verify" เมื่อคุณรันตัวติดตั้งอีกครั้งหรือพยายามถอนการติดตั้งจากส่วน Programs and Features ของ Control Panel
ปิดแอปอื่นๆ ทั้งหมด
Runtime errors ที่เกิดจาก memory leaks หรือเพราะแอปเฉพาะตัวต้องการหน่วยความจำมากกว่าที่มีอยู่ สามารถลดได้โดยการปิดโปรแกรมที่ไม่จำเป็นซึ่งเปิดอยู่ คุณอาจต้องการปรับขนาดของ swap file เพื่อสร้างพื้นที่เพิ่มเติมสำหรับแอปที่ไม่พอดีกับ RAM
หากคุณแน่ใจว่า runtime errors เกิดจากความจุหน่วยความจำ ไม่ใช่จาก memory leak คุณยังสามารถพิจารณาอัปเกรดปริมาณ RAM ในคอมพิวเตอร์ของคุณเพื่อจัดการงานที่หนักกว่าได้
รัน Windows ใน Safe Mode หรือทำ Clean Boot
หากคุณสงสัยว่า runtime errors ที่คุณประสบเป็นผลมาจากไดรเวอร์หรือแอปพลิเคชันซอฟต์แวร์อื่นๆ ในพื้นหลัง คุณสามารถใช้ Safe Mode หรือ clean boot เพื่อยืนยันได้
Safe Mode เป็นโหมดบูทพิเศษใน Windows ที่โหลดไดรเวอร์และบริการ Windows ขั้นต่ำเท่านั้น หากปัญหาหายไปภายใต้ Safe Mode คุณสามารถแน่ใจได้ค่อนข้างมากว่าปัญหาเป็นเรื่องของไดรเวอร์ (อัปเดตพวกมัน) หรือบริการ Windows โปรดดูคู่มือของเราเกี่ยวกับวิธีเริ่มต้นใน Safe Mode เพื่อดูว่าช่วยได้หรือไม่ หากช่วยได้ คุณอาจต้องการทดลองปิดใช้งานบริการในแท็บ MSConfig services
Clean boot เกือบตรงข้ามกับ Safe Mode แทนที่จะโหลดระบบปฏิบัติการขั้นต่ำ Windows จะปิดซอฟต์แวร์สตาร์ทอัปของบุคคลที่สามทั้งหมด หาก clean boot แก้ไข runtime error แสดงว่าน่าจะเป็นแอปของบุคคลที่สามที่ต้องปิด อัปเดต หรือแทนที่ โปรดดูคู่มือของเราเกี่ยวกับวิธีทำ clean boot
อัปเดต Runtime Components
ซอฟต์แวร์มักพึ่งพาไลบรารีซอฟต์แวร์ร่วมและคอมโพเนนท์รันไทม์มาตรฐาน หากไม่ได้ติดตั้ง เสียหาย หรือเป็นเวอร์ชันผิด อาจก่อให้เกิดปัญหา ตัวอย่างของ runtime components เหล่านี้รวมถึงแพ็กเกจ Microsoft Visual C++ redistributable
คุณสามารถดาวน์โหลด VC++ redistributable ที่จำเป็นจากเว็บไซต์ Microsoft ได้ แต่มันมักจะรวมอยู่กับซอฟต์แวร์ที่ต้องการมันอยู่แล้ว ดังนั้นการติดตั้งใหม่หรือซ่อมแซมแอปควรจะกู้คืน Visual C++ runtime library ได้เช่นกัน นี่เป็นหนึ่งในปัญหา runtime component ที่ง่ายที่สุดในการระบุ เพราะข้อความ runtime error ปกติจะระบุว่าเป็น "C++ runtime error"
ตรวจสอบไฟล์ที่เสียหาย
การเสียหายของข้อมูลเกิดขึ้นเมื่อ 1 และ 0 ที่ประกอบไฟล์ถูกทำลายหรือเขียนทับด้วยเหตุผลบางอย่าง การทำลายไฟล์ระบบหรือแอปพลิเคชันสามารถนำไปสู่ runtime errors ที่ไม่คาดคิด
คุณสามารถรัน Windows System File Checker (SFC) เพื่อตรวจสอบและซ่อมแซมความเสียหายของไฟล์ระบบ สำหรับแอปพลิเคชัน ส่วนใหญ่ตัวติดตั้งจะมีตัวเลือก "repair" หากคุณรันมันโดยไม่ถอนการติดตั้งแอปก่อน ด้วยซอฟต์แวร์ไคลเอ็นต์อย่าง Steam คุณยังสามารถใช้ตัวเลือก "verify" บนเกมของคุณเพื่อตรวจสอบว่าไฟล่ายังคงสมบูรณ์
รันการสแกนมัลแวร์
มัลแวร์หลายประเภทฉีดตัวเองเข้าไปในโค้ดที่กำลังทำงาน ทำลายไฟล์ข้อมูล หรือเปลี่ยนไฟล์ executable ทั้งหมดซึ่งอาจนำไปสู่ runtime errors เพื่อตัดมัลแวร์ออกจากสาเหตุที่คุณได้ข้อผิดพลาด ให้รันการสแกนโดยใช้แอนตี้ไวรัสหรือแอนตี้มัลแวร์ที่คุณชอบ
ทำการทดสอบหน่วยความจำ
ก่อนที่ซอฟต์แวร์ที่กำลังทำงานของคุณจะไปถึง CPU เพื่อประมวลผล มันจะแวะที่ RAM ของคุณ หาก RAM ของคุณผิดปกติ อาจก่อให้เกิด runtime errors ที่ยากต่อการติดตาม รันการทดสอบหน่วยความจำและให้แน่ใจว่าไม่ใช่ปัญหาของบิตที่พลิกกลับในโมดูลหน่วยความจำของคุณ!