🐞 دیباگ قدمبهقدم کد آردوینو در شبیهساز آنلاین: بریکپوینت و دیدن متغیرها
برنامهات کامپایل میشود، اجرا هم میشود، ولی جواب غلط میدهد. حالا چه کنی؟ بیشتر بچهها دهها خط Serial.println اضافه میکنند. راه بهتر دیباگر قدمبهقدم است: برنامه را روی یک خط نگه میداری، مقدار همهی متغیرها را میبینی و خطبهخط جلو میروی. روی آردوینو Uno واقعی این کار به سختافزار مخصوص نیاز دارد، ولی در یک شبیه ساز آردوینو آنلاین با یک کلیک انجام میشود. اگر از wokwi یا ووکوی آمدهای و دنبال دیباگر فارسی هستی، این آموزش برای توست.
چند کلمهی کلیدی
- باگ (Bug): هر اشتباهی که باعث شود برنامه کار درست را نکند.
- بریکپوینت (Breakpoint): نقطهی توقف. وقتی اجرا به این خط برسد، برنامه مکث میکند.
- قدم بعد (Step): فقط یک خط اجرا کن و دوباره بایست.
- ادامه (Continue): تا بریکپوینت بعدی بدون توقف برو.
یک برنامهی باگدار
این برنامه باید میانگین پنج عدد ۱۰، ۲۰، ۳۰، ۴۰ و ۵۰ را حساب کند؛ جواب درست ۳۰ است. ولی وقتی اجرایش کنی، عدد دیگری چاپ میشود. برای این برنامه هیچ قطعهای لازم نیست؛ فقط یک آردوینو Uno.
int readings[5] = {10, 20, 30, 40, 50};
void setup() {
Serial.begin(9600);
}
void loop() {
int sum = 0;
for (int i = 0; i <= 5; i++) {
sum = sum + readings[i];
}
int average = sum / 5;
Serial.print("average: ");
Serial.println(average);
delay(1000);
}
شکار باگ، قدمبهقدم
- بریکپوینت بگذار. در ویرایشگر کد، روی حاشیهی کنار شمارهی خط
sum = sum + readings[i];کلیک کن. یک نقطهی قرمز ظاهر میشود. بریکپوینت را قبل از زدن دکمهی اجرا بگذار. - اجرا کن. برنامه تا این خط میرود و میایستد. پنل «دیباگر» وضعیت «متوقف» را نشان میدهد و فهرست متغیرها را میبینی:
sumبرابر ۰ وiبرابر ۰. - ادامه بزن و هر بار متغیرها را نگاه کن. با
iبرابر ۱، ۲، ۳ و ۴، مقدارsumبه ترتیب ۱۰، ۳۰، ۶۰ و ۱۰۰ است. تا اینجا همهچیز درست است. - لحظهی کشف! یک بار دیگر ادامه بزن:
sumحالا ۱۵۰ است، یعنی هر پنج عدد جمع شدهاند، ولی برنامه باز هم روی همین خط میایستد و این بارiبرابر ۵ است. ولی آرایهی ما فقط خانههای ۰ تا ۴ را دارد! خانهی شمارهی ۵ بیرون از آرایه است و هر عددی که آنجای حافظه باشد، بهsumاضافه میشود. - درستش کن. شرط حلقه را از
i <= 5بهi < 5تغییر بده، بریکپوینتها را با «پاککردن نقطهها» بردار و دوباره اجرا کن. حالا ۳۰ چاپ میشود.
کی از دیباگر استفاده کنیم و کی از سریال؟
| موقعیت | ابزار بهتر |
|---|---|
| میخواهی بدانی یک خط اصلاً اجرا میشود یا نه | بریکپوینت |
| مقدار چند متغیر را در یک لحظهی خاص میخواهی | بریکپوینت و پنل متغیرها |
| عددی را در طول زمان دنبال میکنی (مثل سنسور) | سریال مانیتور یا نمودار سریال |
| باگ فقط گاهی پیش میآید | سریال برای ثبت، بعد بریکپوینت روی همان شرط |
در شبیهساز تینکرکد فارسی
در تینکرکد فارسی دیباگر کنار ویرایشگر کد است: روی حاشیهی خطها بریکپوینت میگذاری، برنامه همانجا مکث میکند و دکمههای «ادامه»، «قدم بعد» و «توقف» را داری. بریکپوینتها ذخیره میمانند، پس دفعهی بعد هم سر جایشان هستند. پنل فقط متغیرهایی را نشان میدهد که تا آن خط ساخته شدهاند. برای تمرین با یک برنامهی واقعی، مثال میانگین متحرک را باز کن که دقیقاً با آرایه و حلقه کار میکند، و درس سنسور آرام: میانگینگیری را بخوان. فهرست خطاهای کامپایل هم در مقالهی خطاهای رایج آردوینو آمده است.
اشکالهای رایج
- برنامه روی بریکپوینت نمیایستد: بریکپوینت را بعد از شروع اجرا گذاشتهای. برنامه را متوقف کن، نقطه را بگذار و دوباره اجرا کن. همچنین مطمئن شو آن خط واقعاً اجرا میشود (مثلاً داخل یک if که هیچوقت درست نیست نباشد).
- بریکپوینت روی خط خالی یا کامنت: روی خطی بگذار که دستور واقعی دارد.
- متغیری که دنبالش هستی در فهرست نیست: هنوز به خطی که آن را میسازد نرسیدهای، یا داخل تابع دیگری تعریف شده است.
- با «ادامه» برنامه انگار هنگ کرده: بریکپوینت داخل حلقهی
loopاست و هر بار دوباره میایستد. این عادی است؛ برای اجرای آزاد نقطهها را پاک کن. - نتیجهی تقسیم اعشار ندارد: این باگ نیست؛ تقسیم دو
intدر C++ اعشار را دور میریزد. برای اعشار ازfloatاستفاده کن.
دیباگر و سریال با هم بهترین تیماند؛ اگر سریال را هنوز خوب نمیشناسی، سریال مانیتور و نمودار سریال را بخوان. اگر شبیهساز اصلاً کار نمیکند، صفحهی شبیهساز کار نمیکند؟ و برای همهی پروژهها صفحهی شبیهساز آردوینو را ببین.
دیباگر را در شبیهساز امتحان کن 🐞مقالههای مرتبط
کد آردوینو کار نمیکند؟ ۱۵ علت رایج، از سیمکشی تا تغذیه، با راهحل هر کدام
ارورهای رایج آردوینو و معنیشان: از was not declared in this scope تا avrdude
سریال مانیتور و نمودار سریال آردوینو در شبیهساز آنلاین
رزبری پای پیکو، ESP32 یا آردوینو؟ کدام برد برای شروع بهتر است
همهی آموزشهای برنامهنویسی و عیبیابی آردوینو ← · همهی مقالهها