امروز یه باگ ریپورت داشتیم که ازون بدقلق هاش بود که هنوزم موفق نشدم دلیلشو پیدا کنم. برا همین تصمیم گرفتم تجربیات دیباگم رو باهاتون به اشتراک بذارم و نظراتتونو بدونم.
مهم نیست شما برنامه نویس حرفه ای باشید یا جونیور. دیباگ کردن چیزیه که رو پیشونی ماها نوشته شده پس بریم که تو این پست روش های خودمو براتون بگم و از شما روش های جدیدتونو یاد بگیرم.
به فرآیندی که طی آن شما اقدام به شناسایی رفتار کد در حالت های مختلف میکنید تا در نتیجه اشکال سیستم را پیدا کرده یا به سیستم تسلط بیشتری پیدا کنید دیباگ میگوییم (نقطه سر خط)
ازونجایی که ممکن بود کسایی این پست رو بخونن که علاقمند به برنامه نویسین یا تازه میخوان شروع کنن, بهتره اول بگیم دیباگ کردن تو کجای قصه قهرمان ما میشه و نجاتمون میده.
دیباگ کردن میتونه برای هدف های مختلفی انجام بشه و میخوام چند تا مثال براتون بزنم.
یکیش اینکه شما رفتار سیستم رو میشناسید و میخواید باگ ها رو پیدا کنید.
دومیش اینکه شما میخواید رفتار سیستم رو کشف کنید.
سومیش هم اینکه شما میخواید یک زبان رو یاد بگیرید. به نظر من دیباگ کردن یک کد به زبان جدید و فهمیدن رفتارش کمک خیلی زیادی به سرعت یادگیری شما میکنه.
البته که همه ی این سه حالت میتونه باهم انجام بشه ولی حالا برا روشن شدن قضیه چند تا مثال با جزئیات براتون میگم :
فرض کنید شما تازه یه پروژرو استارت زدید یا اینکه میخواید یه ویژگی جدید به کدهای قدیمیتون اضافه کنید. شما باید یک قالب کلی از کدتون رو تو ذهنتون بیارید مثل نوشتن فیلم نامه, اجزا و نقش ها کجا باشن, وظیفه ی هرکسی چیه و کجا باید وارد عمل بشه. یک فیلم نامه ممکنه بارها و بارها بازبینی بشه پس نویسنده باید بدونه کدوم اتفاقا کجا میفته و چه پیامدهایی داره. کد شما هم همینطوره. وقتی اولین بار بعد از تموم شدن کد ازش اجرا میگیرید در اکثر مواقع با ارورها یا خروجی های نامتعارف روبرو میشید ( اگه نشدید طبق مثل هرچیزی که آسون حل میشه غلطه به کارتون شک کنید یا اینکه تبریک میگم شما ابر قهرمان امروز هستید) اینجاس که باید وارد عمل بشید و با دیباگ کردن مشکل کارتون رو پیدا کنید.
بعضی مواقع خطاهایی توسط کاربران سیستم یا خود برنامه نویسا تو روند اجرای یه دستور مشاهده میشه که اسمشو گذاشتن باگ. این باگ ها توسط خود شما یا همکارانتون تولید شده (بله حقیقت تلخه) و حالا شما باید از گسترش این ویروس خطرناک جلوگیری کنید. اینجا هم ازون مواقعیه که دیباگ کردن به دادتون میرسه و همرو خوشحال میکنه (به شرطی که حل کردن یه باگ موجب ایجاد باگ دیگه ای نشه)
دلیل این مهندسی معکوس دو حالت بیشتر نیست
دیباگ کردن بدین صورت اتفاق میفته که شما با یکی از دستورهای سیستم شروع میکنید و حین اجرا شدنش چشم از مانیتور برنمیدارید تا بفهمید دقیقا چه اتفاقی داره میفته. بعد همونو با یه زبان دیگه کپی میکنید (چین) یا اینکه اون رفتارو توسعه میدید.
خب بعد ازینکه صغری کبری هامو چیدم بهتره برم سراغ هسته ی اصلی مطلب.
من بیشتر وقتمو تو بک اند گذروندم پس طبیعتا راه حل هایی که بلدم هم بیشتر محدود میشه به این حوزه. یدونه تجربه کوچیک تو فرانت اند دارم که اونم میگم.
یک راه خیلی خوب که بهتون کمک میکنه کدتون رو دیباگ کنید استفاده از یک محیط توسعه هست(سعی کردم معادل فارسی برای IDE پیدا کنم و همین به ذهنم رسید). این محیط امکاناتیو برا شما فراهم میکنه(تب debug اون بالا) که میتونید یک قسمت از کد رو نشان گذاری (breakpoint) کنید و کدتون رو ران کنید. کلید های میانبر زیادی هستن که این وسط به کمک شما میان. میتونید باهاشون هر متغیریو که دلتون میخواد به صفحه اضافه کنید و ببینید تو هر لحظه چه مقداری دارن, میتونید انتخاب کنید نشانگر خط به خط جلو بره یا اینکه از روی توابع یا حلقه ها بپره(step over, step into, step...).
تکنیک های این قسمت :
بعله خود من علاقه ی عجیبی به ادیتور ها دارم و سرم درد میکنه الکی. ادیتور ها توانایی اینو دارن که مثل حالت قبل نشان گذاری بشن ولی اصولا کار سخت و زشت و حوصله سربریه و من که بیخیالش شدم. اولین باری که من از IDE اومدم روی ادیتورها سوال بزرگی که تو ذهنم بود این بود که حالا من چجوری بفهمم چی چه مقداری داره و چی کار نمیکنه. برا همین این دوتارو از هم جدا کردم چون به عنوان جونیور دولوپر بعضی وقتا ادم از شنیدن بعضی اسما پنیک میکنه و بهتره بدونه حالا باید چکار کنه.
بهترین حالت برای دیباگ کردن با ادیتور استفاده از دستور print به زبانی هست که باهاش کد میزنید. البته این روش تو حالت های دیگه هم کارایی داره و در نهایت شما انتخاب میکنید چکار کنید.
تکنیک های این قسمت :
من به عنوان یه جونیور فرانت اند دولوپر تنها راهی که بلدم اینکه روی صفحه کلیک راست کنم. گزینه ی inspect رو بزنم و اونجا اگر چیزی مرتبط با html باشه تگ هارو چک کنم و اگر مربوط به جاوا اسکریپت به تب console بریم و اونجا دستور console.log() رو با هر متغیری که میخواید فراخوانی کنید تا ببینید کجای کار مشکل داره.
فرض کنید شما یک پزشک هستید که موفق شدید عفونتی رو که در بدن بیمارتون وجود داره شناسایی کنید حالا اولویتاتون چیا میتونه باشه؟
هیچی دیگه تموم شد کامپیوترتو ببند برو یکم ورزش کن عزیزم :)