หากคุณโค้ดใน C, Objective-C หรือ C ++ คุณสามารถใช้CLang Static Analyzerเพื่อวิจารณ์แหล่งที่มาของคุณโดยไม่ต้องเรียกใช้จริง
มีเครื่องมือการดีบักหน่วยความจำที่มีอยู่: ValGrind, Guard Malloc บน Mac OS X, รั้วไฟฟ้าบน * NIX
สภาพแวดล้อมการพัฒนาบางอย่างมีตัวเลือกให้ใช้ตัวจัดสรรหน่วยความจำแบบดีบักซึ่งทำหน้าที่เติมหน้าใหม่ที่ได้รับการจัดสรรและหน้าที่อิสระใหม่พร้อมขยะตรวจสอบการปลดปล่อยพอยน์เตอร์ที่ไม่ได้ถูกจัดสรรและเขียนข้อมูลบางส่วนก่อนและหลังแต่ละบล็อกฮีป เรียกว่าถ้ารูปแบบที่รู้จักของข้อมูลนั้นมีการเปลี่ยนแปลง
ผู้ชายบางคนใน Slashdot กล่าวว่าเขาได้รับประโยชน์มากมายจากแหล่งบรรทัดใหม่ที่เคยก้าวล้ำใน debugger "นั่นแหล่ะ" เขาพูด ฉันไม่ได้ทำตามคำแนะนำของเขาเสมอ แต่เมื่อฉันมีประโยชน์กับฉันมาก แม้ว่าคุณจะไม่มีกรณีทดสอบที่กระตุ้นเส้นทางรหัสผิดปกติคุณสามารถ twiddle ตัวแปรใน debugger ของคุณเพื่อใช้เส้นทางดังกล่าวโดยการจัดสรรหน่วยความจำบางส่วนจากนั้นใช้ดีบักเกอร์เพื่อตั้งค่าตัวชี้ใหม่ของคุณเป็น NULL แทน ที่อยู่หน่วยความจำจากนั้นดำเนินการผ่านตัวจัดการความล้มเหลวในการจัดสรร
ใช้การยืนยัน - แมโคร assert () ใน C, C ++ และ Objective-C หากภาษาของคุณไม่มีฟังก์ชั่นยืนยันให้เขียนด้วยตัวคุณเอง
ใช้การยืนยันอย่างอิสระแล้วปล่อยไว้ในรหัสของคุณ ฉันเรียก assert () "การทดสอบที่ดำเนินการทดสอบ" ฉันใช้มันบ่อยที่สุดเพื่อตรวจสอบสิ่งที่จำเป็นเบื้องต้นที่จุดเข้าใช้งานส่วนใหญ่ของฉัน นั่นเป็นส่วนหนึ่งของ "Programming by Contract" ซึ่งสร้างขึ้นในภาษาโปรแกรมไอเฟล อีกส่วนคือ postconditions นั่นคือใช้ assert () ที่ function return points แต่ฉันพบว่าฉันไม่ได้รับไมล์สะสมเท่าที่จำเป็น
คุณยังสามารถใช้ยืนยันเพื่อตรวจสอบค่าคงที่ของคลาส ในขณะที่ชั้นเรียนไม่จำเป็นต้องเคร่งครัดในการมีค่าคงที่ใด ๆ คลาสที่ออกแบบมาอย่างสมเหตุสมผลส่วนใหญ่มี คลาสไม่แปรเปลี่ยนเป็นเงื่อนไขบางอย่างที่เป็นจริงเสมอนอกเหนือจากภายในฟังก์ชั่นสมาชิกที่อาจวางวัตถุของคุณให้อยู่ในสถานะที่ไม่สอดคล้องกันชั่วคราว ฟังก์ชั่นดังกล่าวจะต้องเรียกคืนความสอดคล้องก่อนที่จะกลับมา
ดังนั้นฟังก์ชั่นสมาชิกทุกคนสามารถตรวจสอบค่าคงที่เมื่อเข้าและออกและชั้นเรียนสามารถกำหนดฟังก์ชั่นที่เรียกว่า CheckInvariant ว่ารหัสอื่นใดสามารถเรียกได้ตลอดเวลา
ใช้เครื่องมือครอบคลุมรหัสเพื่อตรวจสอบว่าแหล่งที่มาของคุณกำลังทำการทดสอบจริง ๆ จากนั้นออกแบบการทดสอบที่กระตุ้นให้เกิดบรรทัดที่ไม่ผ่านการทดสอบ ตัวอย่างเช่นคุณสามารถตรวจสอบตัวจัดการหน่วยความจำต่ำโดยการเรียกใช้แอปของคุณภายใน VM ที่กำหนดค่าด้วยหน่วยความจำกายภาพน้อยและไม่มีไฟล์สลับหรือตัวเล็ก ๆ
(ด้วยเหตุผลบางอย่างที่ฉันไม่เคยทำในขณะที่ BeOS สามารถทำงานได้โดยไม่ต้องสลับไฟล์มันก็ไม่เสถียรอย่างนั้น Dominic Giampaolo ผู้เขียนระบบไฟล์ BFS กระตุ้นให้ฉันไม่เรียกใช้ BeOS โดยไม่ต้องสลับฉันไม่ ดูว่าทำไมเรื่องนี้ถึงมีความสำคัญ แต่ต้องเป็นสิ่งประดิษฐ์ในการนำไปใช้บางประเภท)
คุณควรทดสอบการตอบสนองของรหัสต่อข้อผิดพลาด I / O ลองจัดเก็บไฟล์ทั้งหมดของคุณบนเครือข่ายที่ใช้ร่วมกันแล้วถอดสายเคเบิลเครือข่ายของคุณในขณะที่แอปของคุณมีภาระงานสูง ปลดสายเคเบิลในทำนองเดียวกัน - หรือปิดระบบไร้สายของคุณ - หากคุณกำลังสื่อสารผ่านเครือข่าย
สิ่งหนึ่งที่ฉันพบว่าทำให้โกรธเป็นพิเศษคือเว็บไซต์ที่ไม่มีรหัส Javascript ที่มีประสิทธิภาพ เพจของ Facebook โหลดไฟล์ Javascript เล็กน้อยหลายสิบไฟล์ แต่หากไฟล์ใดไฟล์หนึ่งไม่สามารถดาวน์โหลดได้หน้าทั้งหมดจะแตก จะต้องมีวิธีการอย่างใดอย่างหนึ่งเพื่อให้ความผิดพลาดบางอย่างพูดโดยลองใหม่ดาวน์โหลดหรือให้ทางเลือกที่เหมาะสมบางชนิดเมื่อสคริปต์ของคุณไม่ดาวน์โหลด
ลองฆ่าแอพของคุณด้วยตัวดีบั๊กเกอร์หรือ "kill -9" บน * NIX ขณะที่มันกำลังเขียนไฟล์ขนาดใหญ่ที่สำคัญ หากแอปของคุณได้รับการออกแบบมาอย่างดีไฟล์ทั้งหมดจะถูกเขียนหรือจะไม่ถูกเขียนเลยหรืออาจจะเขียนเพียงบางส่วนสิ่งที่เขียนจะไม่เสียหายกับข้อมูลที่บันทึกไว้ว่าสามารถใช้งานได้โดยสมบูรณ์ แอพเมื่ออ่านไฟล์อีกครั้ง
ฐานข้อมูลมักมีดิสก์ I / O ที่ป้องกันความผิดพลาดอยู่เสมอ แต่แอพประเภทอื่น ๆ แม้ว่าระบบไฟล์ที่ถูกเจอร์นัลจะป้องกันความเสียหายของระบบไฟล์ในกรณีที่ไฟฟ้าขัดข้องหรือล่ม แต่ก็ไม่ได้ทำอะไรเลยเพื่อป้องกันความเสียหายหรือการสูญหายของข้อมูลของผู้ใช้ นั่นเป็นความรับผิดชอบของแอ็พพลิเคชันผู้ใช้ แต่แทบจะไม่ได้มีฐานข้อมูลใด ๆ เลยที่จะยอมรับข้อผิดพลาดได้