مدیریت خطا و اشکالزدایی
انواع خطاهای کامپایل و اجرا در پاسکال و تکنیکهای سیستماتیک دیباگ.
خطاها دوست شما هستند!
هیچ برنامهنویسی بدون خطا کد نمینویسد. حرفهای کسی است که خطاها را سریع پیدا و رفع کند.
دو نوع خطا
۱. خطاهای کامپایل (Compile Errors)
قبل از اجرا گرفته میشوند — پاسکال در این کار عالی است:
| خطا | علت رایج | راهحل |
|---|---|---|
| «;» expected | نقطهویرگول جا افتاده | انتهای دستورها را چک کنید |
| «.» expected | end. بدون نقطه | آخرین end باید end. باشد |
| Undefined symbol | متغیر تعریفنشده یا غلط املایی | بخش var را چک کنید |
| Type mismatch | مقدار نامناسب برای نوع | مثل متن در integer |
| Unexpected end | begin/end نامتوازن | بلوکها را بشمارید |
۲. خطاهای اجرا (Runtime Errors)
کامپایل میشود اما موقع اجرا خراب میشود:
| خطا | علت | پیشگیری |
|---|---|---|
| Division by zero | تقسیم بر صفر | قبل از div/mod مقسوم را چک کنید |
| Range check | ایندکس خارج از آرایه | حلقهها را با محدوده تطبیق دهید |
| Stack overflow | بازگشت بینهایت | شرط پایه را چک کنید |
| Invalid opcode | منطق غلط | کد را بازبینی کنید |
تکنیکهای دیباگ
۱. پیامهای چاپی (سادهترین!)
var
i, sum: integer;
begin
sum := 0;
for i := 1 to 5 do
begin
sum := sum + i;
writeln('DEBUG: i=', i, ' sum=', sum); { موقت! }
end;
end;
۲. بازبینی منطقی
کد را خط به خط «مثل کامپیوتر» اجرا کنید — روی کاغذ مقادیر را بنویسید:
i=1: sum=0+1=1
i=2: sum=1+2=3
i=3: sum=3+3=6 ...
۳. کوچک کردن مسئله
اگر ورودی ۱۰۰۰ تایی خراب است، با ۳ عنصر تست کنید — خطا زودتر دیده میشود.
۴. نصف کردن کد
نصف اول را کامنت کنید — اگر خطا ماند، در نصف دوم است؛ وگرنه در اول!
مثال: شکار باگ
{ باگ: میانگین غلط! }
program Bug;
var
a, b: integer;
avg: real;
begin
a := 3;
b := 4;
avg := a + b / 2; { ❌ فقط b تقسیم شده! }
writeln(avg:0:2); { 5.0 — غلط! }
avg := (a + b) / 2; { ✅ پرانتز! }
writeln(avg:0:2); { 3.5 — درست }
end.
چکلیست باگهای رایج پاسکال
- ☐ ; قبل از else نگذاشتهاید؟
- ☐ end. آخر با نقطه است؟
- ☐ := و = را قاطی نکردهاید؟
- ☐ متغیرها مقدار اولیه دارند؟
- ☐ حلقه به سمت پایان میرود؟
- ☐ ایندکس آرایه در محدوده است؟
- ☐ تقسیم بر صفر ممکن است؟
- ☐ پرانتز شرطهای مرکب؟
خلاصه
- خطای کامپایل = دوست (قبل از اجرا گرفته میشود)
- خطای اجرا = دشمن پنهان (با چکلیست پیشگیری کنید)
- دیباگ = writeln + اجرای ذهنی + کوچک کردن
این مبحث بخشی از دوره آموزش کامل پاسکال است.