دیباگ یعنی پیدا کردن علت، نه حدس زدن
وقتی پروژه کار نمیکند، تعویض تصادفی سیم و کد معمولا وضعیت را بدتر میکند. اول باید نوع خطا را بشناسی:
- خطای کامپایل: کد حتی ساخته نمیشود؛ مثلا
;جا افتاده یا نام تابع اشتباه است. - خطای زمان اجرا/اتصال: برنامه ساخته میشود اما Upload، ارتباط یا سختافزار مشکل دارد.
- خطای منطقی: برنامه اجرا میشود ولی تصمیم اشتباه میگیرد.
پیام خطا را از بالا بخوان
در خطاهای کامپایل، اولین پیام معنیدار معمولا مهمتر از دهها پیام بعدی است؛ خطای اول میتواند بقیه را زنجیرهای تولید کرده باشد. شماره خط و نام فایل را پیدا کن و چند خط اطرافش را بخوان.
Serial مثل پنجره داخل برنامه است
در Arduino میتوانی مقدارهای مهم را چاپ کنی:
Serial.begin(9600);
Serial.print("distance=");
Serial.println(distanceCm);
اگر ربات بیدلیل میایستد، به جای تغییر شرط، اول ببین distanceCm واقعا چه عددی دارد. شاید سنسور صفر میدهد یا سیم قطع است.
مسئله را نصف کن
اگر ربات «سنسور + منطق + موتور» دارد، هر بخش را جدا تست کن:
- آیا سنسور عدد منطقی میدهد؟
- آیا شرط با ورودی فرضی درست تصمیم میگیرد؟
- آیا موتور با یک فرمان ساده حرکت میکند؟
وقتی هر سه جدا درستاند، سراغ اتصال بین آنها برو. این روش از جستوجوی همزمان در کل پروژه خیلی سریعتر است.
یک تغییر در هر آزمایش
نسخهای که کار میکرد نگه دار. بعد از هر تغییر فقط یک چیز اصلی را عوض کن و نتیجه را ثبت کن. اگر هم کد، هم سیمکشی و هم منبع تغذیه را همزمان عوض کنی، حتی اگر مشکل حل شود نمیفهمی علت چه بوده.
تمرین دیباگ
فرض کن Serial همیشه distance=0 نشان میدهد. سه فرض بنویس: مثلا سیم Echo قطع است، کد پایه اشتباه است، سنسور تغذیه ندارد. برای هر فرض یک تست مستقل بنویس که آن را تایید یا رد کند. سپس ترتیب تستها را از سادهترین/کمخطرترین تا پیچیدهترین بچین.
گزارش خطا
وقتی از همتیمی کمک میخواهی این چهار چیز را بده: «انتظار داشتم چه شود»، «چه شد»، «چه نسخهای از کد/مدار»، «چه تستهایی انجام دادم». جمله «کار نمیکنه» اطلاعات کافی برای دیباگ نیست.