اشتباهات دستوری و اجرایی در هنگام کامپایل و اجرای
برنامه باعث ایجاد پیام های خطا می شود. پیدا کردن و اصلاح اشتباهاتی از این نوع
آسان می باشد، حتی اگر پیغام های خطا نامفهوم باشند. اما اشتباهاتی منطقی زیرکانه
تر هستند.
در این حالت برنامه به درستی دستورالعمل های برنامه نویس را
انجام می دهد. و اشتباهات دستوری وجود ندارد اما برنامه نویس ازکامپیوتر با
دستورالعمل هایی که مطلقا نادرست هستند استفاده می کنند. پیدا کردن چنین اشتباهاتی
گاهی واقعا مشکل است چون خروجی حاصل از برنامه ای که منطقا نادرست است، به نظر فاقد
خطا می باشد. به علاوه پیدا کردن اشتباهات منطقی و حتی وقتی به وجود آن ها پی می
بریم (برای مثال، وقتی خروجی محاسبه شد به طور آشکار نادرست است) اغلب دشوار می
باشد.
بنابراین، اندکی جست و جوی مفید برای پیدا کردن و اصلاح اشتباهات از این
نوع لازم است. چنین جست و جویی اشکال زدایی منطقی نامیده می شود. برای این که
بتوان به اشتباهات منطقی دسترسی پیدا کنیم باید با حوصله نمایش برخی از نتایج
میانی را در نظر گرفت در حقیقت باید خط به خط برنامه را ردیابی نماییم یا می
توان آن ناحیه که خطاها در آن منطقه پدید می آید ردیابی نماید. هر چه مقادیر خروجی
آن ناخیه بیشتر باشد شانس ردیابی منبع خطا بیشتر است.