If you do not find what you're looking for, you can use more accurate words.
من الطبيعي أن تكون الخطوة الأولي لتصحيح الأخطاء هي محاولة إعادة إنتاج المشكلة. وهذا يمكن أن تكون مهمة دالة، مثلا فيما يخص المعالجة المتوازية أو بعض من الأخطاء البرمجية غير العادية. وكذلك، فبيئة مستخدم معين وتاريخ الاستعمال يمكن أن يجعل من الصعب إعادة إنتاج المشكلة.
وبعد إن تتم إعادة إنتاج الخطأ، ربما يحتاج إدخال البرنامج إلي التبسيط لكي يكون من السهل تصيح الخطأ. مثلا، خطأ في ملف مؤلف يمكن أن يجعله ] يتوقف فجأة عند تحليل لغوي لبعض ملفات المصدر الضخمة. ومع هذا، فبعد تبسيط الحالة الاختبارية، فخطوط قليلة فقط من ملف المصدر الأصلي يمكن أن تكون كافية لإعادة إنتاج نفس التوقف المفاجئ. ويمكن عمل ذلك التبسيط يدويا، باستخدام مدخل Divide and conquer algorithm. وسوف يحاول المبرمج إزالة بعض أجزاء الحالة الاختبارية وفحص ما إذا كانت المشكلة لا تزال موجودة. وعندما تصحيح الخطأ في واجهة المستخدم الرسومية، فيمكن للمبرمج أن يحاول تخطي بعض من تفاعل المستخدم من وصف المشكلة الأصلية وفحص ما إذا كانت الأفعال الباقية كافية لظهور الأخطاء.
وبعد ما يكون قد تم تبسيط الحالة الاختبارية بشكل كافي، يمكن للمبرمج استخدام أداة المصحح لفحص حالات البرنامج (قيم المتغيرات، مع call stack) ويتتبع أثر أصل المشكلة أو المشكلات. وبالمثل، يمكن استخدام ] التتبع[. وفي الحالات البسيطة، يكون التتبع عبارة عن بيانات طباعة قليلة، والتي تقوم بإنتاج قيم المتغيرات عند نقاط معينة من تنفيذ البرنامج.