پرش به محتوا
آموزش و مهارتآموزشی

دیباگ کردن (Debugging)؛ مهارتی که هیچ دوره‌ای کامل یاد نمی‌دهد

تتحریریه امروزینو۱ آبان ۱۴۰۵۵ دقیقه مطالعه۰ بازدید
ذره‌بین روی صفحهٔ کد با هایلایت خط قرمز خطا؛ نماد فرایند دیباگ کردن برای برنامه‌نویسان تازه‌کار

وقتی برنامه ارور می‌دهد یا خروجی اشتباه می‌دهد چه می‌کنید؟ در این راهنما فرایند گام‌به‌گام دیباگ را می‌آموزید: خواندن پیام خطا و Stack Trace، کوچک‌کردن فضای مشکل، استفاده از دیباگر VS Code و تکنیک‌های نجات برای وقتی ساعت‌ها گیر کرده‌اید.

یک روزِ معمولیِ تازه‌کارها: برنامه کار نمی‌کند، پیام قرمزی آمده که معلوم نیست چه می‌گوید، و شما شروع می‌کنید به تغییرِ شانسیِ خط‌ها به امید این‌که درست شود. یک ساعت بعد، کد بدتر از اول شده و حتی همان خطای قبلی هم عوض شده است. اگر این صحنه آشناست، مشکل شما دانش نیست؛ نداشتنِ فرایند است.

دیباگ کردن (Debugging) یعنی جست‌وجوی سیستماتیک برای پیدا کردن علتِ رفتارِ اشتباه برنامه. خبر خوب: برخلاف تصور رایج، دیباگ مهارتی کاملاً قابل‌آموزش است و فرایند مشخصی دارد. این مطلب همان فرایند را قدم‌به‌قدم می‌چیند؛ اگر تازه در مسیر یادگیری برنامه‌نویسی هستید، همین حالا آن را در روتین‌تان بگذارید.

ذهنیت: باگ اطلاعات است، نه حکم

قبل از ابزار و تکنیک، یک جابه‌جایی ذهنی لازم است. ارور یعنی سیستم دقیقاً گفته کجا نتوانست ادامه دهد؛ خروجی غلط یعنی جایی فرضِ شما دربارهٔ داده اشتباه است. برنامه‌نویس قوی کسی نیست که باگ ندارد — کسی است که علتِ باگ را سریع‌تر پیدا می‌کند. دو عادت ذهنی بنیادی:

  • با ارور مهربان باشید: پیام خطا دشمن نیست؛ رایگان‌ترین ابزار عیب‌یابی است. عادت کنید جمله‌به‌جمله بخوانیدش، نه این‌که با دیدهٔ تنگ از آن فرار کنید.
  • باگ جادو نیست: هر رفتار برنامه یک علتِ قطعی دارد. «گاهی درمی‌شود گاهی نمی‌شود» همیشه یعنی یک حالتِ مبهم در داده یا زمان‌بندی وجود دارد که هنوز پیدا نکرده‌اید.

فرایند پنج‌مرحله‌ای دیباگ

۱. بازخوانی پیام خطا: نوع خطا (خط اول) و آخرین خطی که نام فایل و شمارهٔ خطِ خودتان را دارد را بخوانید. undefined is not a function یعنی چیزی که فکر می‌کردید تابع است، وجود ندارد. اگر معنیِ واژه را نمی‌دانید، خودِ متن خطا را جست‌وجو کنید — نه «برنامه‌ام کار نمی‌کند» را. ۲. بازتولیدِ قابل‌اعتماد: باگ را در حالتی پیدا کنید که «همیشه» رخ می‌دهد، نه گاهی. اگر دکمه‌ای گاهی کار می‌کند، اول شرایط دقیقِ هر دو حالت را بنویسید؛ همان‌جا سرنخ اصلی است. ۳. کوچک‌کردن فضای جست‌وجو: باگ را مثل دایره‌ای تصور کنید که در هر مرحله نصفش می‌کنید. وسط مسیر یک خروجیِ آزمایشی بگذارید: آیا داده تا این‌جا درست است؟ بله؟ پس مشکل بعد از این نقطه است. با دو سه تقسیم، از «کل برنامه» به «یک تابع مشخص» می‌رسید. ۴. فرضیه بسازید و فقط یک چیز را تست کنید: «به نظرم چون متغیر خالی می‌مانَد». همین را مستقیم با یک لاگ یا دیباگر چک کنید. هر بار فقط یک فرضیه؛ تغییرِ همزمانِ چند جا، شواهد را خراب می‌کند. ۵. اصلاح و مطمئن‌شدن: بعد از حل، علت را در یک خط بنویسید (دفترِ خطاها) و همان مسیر را یک بار کامل اجرا کنید تا مطمئن شوید چیز دیگری نشکسته است.

ابزارها: از console.log تا دیباگر

  • لاگِ هدفمند: نه ده‌ها لاگِ پراکنده، بلکه یک لاگ با برچسب: console.log('checkout - before:', total). لاگِ بدون برچسب، خودش دردی تازه می‌سازد.
  • دیباگرِ ادیتور (Breakpoint): در VS Code روی شمارهٔ خط کلیک کنید؛ اجرای برنامه همان‌جا متوقف می‌شود و مقدارِ همهٔ متغیرها را در همان لحظه می‌بینید و قدم‌به‌قدم جلو می‌روید. این، «console.log اما با تمام داده‌ها» است و راه‌اندازی‌اش در مستندات رسمی وی‌اس‌کد (پایین مطلب) مرحله‌به‌مرحله آمده است.
  • ابزار توسعه‌دهندهٔ مرورگر (DevTools): برای هر چیزی که در مرورگر اجرا می‌شود، با کلید F12 تب Console خطاها را نشان می‌دهد و تب Sources امکان breakpoint روی کد جاوااسکریپت را می‌دهد؛ راهنمای کاملش لینک شده است.
  • کنسولِ زبان‌های دیگر: در پایتون print، در PHP var_dump — ایده یکی است: ببین در آن نقطه از مسیر، داده واقعاً چه شکلی است.

وقتی ساعت‌ها گیر کرده‌اید

  • قانون ۲۰ دقیقه: اگر ۲۰ دقیقه روی یک فرضیه پیشرفت نداشتید، از مانیتور بلند شوید. راه‌رفتن، معروف‌ترین دیباگرِ دنیاست؛ مغز در پس‌زمینه روی مسئله کار می‌کند.
  • اردکِ لاستیکی: کد را خط‌به‌خط برای یک شیء بی‌جان (یا هم‌تیمی) توضیح دهید؛ نیمی از مواقع وسطِ توضیح، خودتان اشتباه را می‌بینید.
  • بازنویسیِ بخشِ مشکل‌دار: گاهی کدِ درهم، غیرقابلِ دیباگ است. نوشتنِ دوبارهٔ ۱۵ خط، سریع‌تر از فهمیدنِ همان ۱۵ خطِ خراب است.
  • بازگشت به آخرین نسخهٔ سالم: اگر «دیشب کار می‌کرد»، اولین مظنونِ تغییراتِ جدید است. این‌جاست که ارزشِ گیت معلوم می‌شود؛ با کامیت‌های کوچک، برگشتن به نسخهٔ سالم دو دقیقه طول می‌کشد — گیت و گیت‌هاب از صفر همین عادت را می‌سازد.

در یادگیری عمیق‌تر، دیباگ خوب در واقع همان تفکر نقادانه روی کد است: فرضیه، آزمون، شواهد، نتیجه.

سؤالات پرتکرار

چطور بفهمم ارور از فرانت‌اند است یا بک‌اند؟

تب Network در ابزار توسعه‌دهندهٔ مرورگر را باز کنید و درخواستِ مشکل‌دار را ببینید: اگر درخواست اصلاً ارسال نمی‌شود یا خطای جاوااسکریپت در Console هست، مشکل سمت مرورگر است؛ اگر درخواست می‌رود و پاسخ با کد ۴۰۰ یا ۵۰۰ برمی‌گردد، مشکل سمت سرور است. کد وضعیتِ پاسخ، اولین سرنخ شماست.

یادگیری دیباگ را از کجا تمرین کنم؟

متعمدانه و در محیط امن: در پروژه‌های اولیهٔ برنامه‌نویسی عمداً چیزها را خراب کنید — نام متغیر را اشتباه بنویسید، پرانتز را حذف کنید، آرگومان را جابه‌جا کنید — و ارورهای به‌دست‌آمده را بخوانید. آشنایی با «الفبای خطاها» بعداً هزاران دقیقه برایتان ذخیره می‌کند.

آیا هوش مصنوعی می‌تواند جای دیباگ‌کردن را بگیرد؟

برای توضیحِ یک ارورِ شفاف، ابزارهای هوش مصنوعی سرعت خوبی می‌دهند؛ اما اگر همیشه پاسخِ آماده بگیرید، مهارتِ ساختنِ فرضیه در شما رشد نمی‌کند. ترکیب درست: اول خودتان فرضیه بنویسید، بعد از هوش مصنوعی برای چک‌کردن یا توضیحِ جزئیات استفاده کنید. برای کسی که درآمد دلاری می‌خواهد، کیفیت دیباگ مستقیماً نرخ ساعتی‌اش را تعیین می‌کند — فریلنسری برنامه‌نویسی وب این ارتباط را باز کرده است.

پیشنهاد برای ادامهٔ مطالعه

اگر این مطلب برایتان مفید بود، این‌ها را هم از دست ندهید:

یادگیری برنامه‌نویسی از صفر؛ نقشه راه شش‌ماهه تا اولین پروژه برنامه‌نویسی را از کجا شروع کنیم؟ نقشهٔ راه ۲۰۲۶ مصاحبه فنی برنامه‌نویسی؛ آمادگی کامل برای سؤالات کدنویسی سایت پورتفولیو برنامه‌نویس؛ ویترینی که مصاحبه می‌آورد پایتون یا جاوااسکریپت؟ مقایسهٔ کامل دو زبان محبوب در ۲۰۲۶

آخرین بازبینی تحریریه: ۱ آبان ۱۴۰۵

این مطلب برایتان مفید بود؟

با پسندیدن، به ما کمک می‌کنید مطالب بهتری منتشر کنیم.

مطالب مرتبط

دو طرف میز مذاکره با برگهٔ پیشنهاد شغلی و ماشین‌حساب روی میز؛ نماد مذاکره حقوق و پیشنهاد شغلی
آموزش و مهارت

مذاکره حقوق در مصاحبه و پیشنهاد شغلی؛ بدون ریسک‌کردن فرصت

بیشتر ما اولین عددی که می‌شنویم را می‌پذیریم — و همان تفاوتِ سالانه را هر سال از دست می‌دهیم. این راهنمای مذاکره حقوق برای بازار ایران و دورکاری است: تحقیقِ عدد درست، زمان‌بندیِ اعلامش در مصاحبه، جمله‌های آماده و واکنش درست به پیشنهادِ کم.

تحریریه امروزینو
۱۴۰۵/۰۸/۰۱۵ دقیقه
فلش‌کارت‌ها و تقویم مرور فاصله‌دار با فواصل ۱، ۳، ۷، ۱۴ و ۳۰ روز
آموزش و مهارت

راه‌اندازی سیستم مرور فاصله‌دار؛ از ساخت فلش‌کارت تا کار با Anki

نظریه را بلدید اما سیستم ندارید؟ راهنمای عملی راه‌اندازی مرور فاصله‌دار: چه چیزی ارزش فلش‌کارت‌شدن دارد، شش قاعدهٔ کارت خوب، جدول ۱-۳-۷-۱۴-۳۰ و روتین نگهداری روزی ۱۵ دقیقه.

تحریریه امروزینو
۱۴۰۵/۰۸/۰۱۵ دقیقه
مقایسهٔ دو حالت مطالعه؛ تماشای منفعل ویدیو در برابر یادداشت‌برداری فعال
آموزش و مهارت

یادگیری فعال و منفعل؛ تفاوت واقعی و راه تبدیل مطالعهٔ منفعل به فعال

چرا سه ساعت تماشای ویدیو هیچ مهارتی نمی‌سازد؟ تفاوت واقعی یادگیری فعال و منفعل، توهم روانی‌بودن، پنج تکنیک عملی تبدیل و نسبت طلایی ۳۰ به ۷۰ در روتین هفتگی.

تحریریه امروزینو
۱۴۰۵/۰۸/۰۱۵ دقیقه
طرح اولیهٔ یک پروژه روی میز کار؛ ساختن به‌جای فقط تماشای دوره
آموزش و مهارت

یادگیری با پروژه؛ از جمع‌کردن دوره‌ها تا ساختن مهارت واقعی

چرا دوره‌دیدن به‌تنهایی مهارت نمی‌سازد و چطور یادگیری را دور یک پروژهٔ واقعی بچینیم؟ نردبان انتخاب پروژه، چرخهٔ ساخت و یادگیری ۷۰/۳۰، دو مثال واقعی و مسیر رسیدن به نمونه‌کار.

تحریریه امروزینو
۱۴۰۵/۰۸/۰۱۶ دقیقه