داشبورد›رودمپ›برنامه‌نویسی مقدماتی
💻 برنامه‌نویسی مقدماتی · درس ۴

دیباگ و خواندن خطا

به جای حدس زدن، خطا را مرحله‌ای پیدا می‌کنی و با چاپ مقدارها و تست کوچک، محل مشکل را محدود می‌کنی.

⏱ ۱۶ دقیقه 🌱 آسان ⭐ +۳۰ XP 🧠 کوئیز الزامی
🎯
بعد از این درس

قراره چی یاد بگیری؟

  • فرق خطای کامپایل و خطای منطقی را بدانی.
  • با Serial/Log و کوچک‌سازی مسئله محل خطا را محدود کنی.
  • یک فرایند دیباگ تکرارپذیر داشته باشی.

دیباگ یعنی پیدا کردن علت، نه حدس زدن

وقتی پروژه کار نمی‌کند، تعویض تصادفی سیم و کد معمولا وضعیت را بدتر می‌کند. اول باید نوع خطا را بشناسی:

  1. خطای کامپایل: کد حتی ساخته نمی‌شود؛ مثلا ; جا افتاده یا نام تابع اشتباه است.
  2. خطای زمان اجرا/اتصال: برنامه ساخته می‌شود اما Upload، ارتباط یا سخت‌افزار مشکل دارد.
  3. خطای منطقی: برنامه اجرا می‌شود ولی تصمیم اشتباه می‌گیرد.

پیام خطا را از بالا بخوان

در خطاهای کامپایل، اولین پیام معنی‌دار معمولا مهم‌تر از ده‌ها پیام بعدی است؛ خطای اول می‌تواند بقیه را زنجیره‌ای تولید کرده باشد. شماره خط و نام فایل را پیدا کن و چند خط اطرافش را بخوان.

Serial مثل پنجره داخل برنامه است

در Arduino می‌توانی مقدارهای مهم را چاپ کنی:

Serial.begin(9600);
Serial.print("distance=");
Serial.println(distanceCm);

اگر ربات بی‌دلیل می‌ایستد، به جای تغییر شرط، اول ببین distanceCm واقعا چه عددی دارد. شاید سنسور صفر می‌دهد یا سیم قطع است.

مسئله را نصف کن

اگر ربات «سنسور + منطق + موتور» دارد، هر بخش را جدا تست کن:

  • آیا سنسور عدد منطقی می‌دهد؟
  • آیا شرط با ورودی فرضی درست تصمیم می‌گیرد؟
  • آیا موتور با یک فرمان ساده حرکت می‌کند؟

وقتی هر سه جدا درست‌اند، سراغ اتصال بین آن‌ها برو. این روش از جست‌وجوی همزمان در کل پروژه خیلی سریع‌تر است.

یک تغییر در هر آزمایش

نسخه‌ای که کار می‌کرد نگه دار. بعد از هر تغییر فقط یک چیز اصلی را عوض کن و نتیجه را ثبت کن. اگر هم کد، هم سیم‌کشی و هم منبع تغذیه را همزمان عوض کنی، حتی اگر مشکل حل شود نمی‌فهمی علت چه بوده.

تمرین دیباگ

فرض کن Serial همیشه distance=0 نشان می‌دهد. سه فرض بنویس: مثلا سیم Echo قطع است، کد پایه اشتباه است، سنسور تغذیه ندارد. برای هر فرض یک تست مستقل بنویس که آن را تایید یا رد کند. سپس ترتیب تست‌ها را از ساده‌ترین/کم‌خطرترین تا پیچیده‌ترین بچین.

گزارش خطا

وقتی از هم‌تیمی کمک می‌خواهی این چهار چیز را بده: «انتظار داشتم چه شود»، «چه شد»، «چه نسخه‌ای از کد/مدار»، «چه تست‌هایی انجام دادم». جمله «کار نمی‌کنه» اطلاعات کافی برای دیباگ نیست.

🃏
مرور سریع

فلش کارت‌ها

۱ / ۳
🧠
برای تکمیل درس لازمه

آزمون کوتاه همین درس

حد نصاب ۷۰٪

برای عبور از درس، مفهوم را روی یک موقعیت واقعی به کار ببر؛ جواب‌ها از حفظ یک جمله نیستند.

۱

کد Upload شده اما ربات با فاصله زیاد هم توقف می‌کند. اولین اقدام مناسب چیست؟

۲ امتیاز
۲

در دیباگ بهتر است چند تغییر را همزمان انجام دهیم تا سریع‌تر یکی جواب بدهد.

۱ امتیاز
۳

یک چرخه دیباگ قابل تکرار را مرتب کن.

۲ امتیاز
☰بازتولید خطا
☰تغییر/تست یک مورد
☰ثبت نتیجه
☰ساخت یک فرض
☰جمع‌کردن شواهد
با Drag & Drop یا فلش‌ها ترتیب رو درست کن.
۲ سوال هنوز جواب نداره.
🔗
برای عمیق‌تر شدن

منابع تکمیلی