10 نکته عالی برای دیباگ کردن در فضای NET.
1397/12/12 16:26 , میلاد صاحب نظر

10 نکته عالی برای دیباگ کردن در فضای NET.

حتی بهترین و به‌ظاهر بدون نقص‌ترین طرح ها و نقشه ها هم گاهی دچار اشکال و اختلال می‌شوند. حتی وقتی خیلی دقت و وسواس به خرج دهید و در بین راه تست های مختلف هم انجام دهید، باز هم گاهی لازم است دوباره وارد عمل شوید و برنامه را دیباگ کنید. در این پست، ۱۰ نکته دیباگ کردن برای فضای NET. را بررسی خواهیم کرد.

  1. قرار دادن بریک پوینت ها

بریک پوینت یکی از اجزای پایه ای و اساسی فرآیند دیباگ کردن است. در واقع بریک پوینت یک هشدار به محیط دیباگ است و به برنامه می‌گوید که باید در نقطه خاصی از کد اجرا را متوقف کند. اگر از پک کامل Visual Studio IDE استفاده می‌کنید، پس اضافه کردن یک بریک پوینت برای شما کار ساده ای است. کافی است روی بخش کناری در سمت چپ کدی که می‌خواهید اجرای برنامه در آنجا متوقف شود، کلیک کنید.

بریک پوینت ها را تقریبا می‌توان به هر خط کدی که اجرا می‌شود، اضافه کرد. این بدان معنا است که شما نمی‌توانید در کدها روی اتریبیوت [fact] یا روی نام یک تابع کلیک کنید و بریک پوینت قرار دهید. در مورد اتریبیوت ها، اگر واقعا لازم است در آنها توقف ایجاد کنید، می‌توانید بریک پوینت را روی تعریف اتریبیوت قرار دهید. قرار دادن بریک پوینت روی خط اول کد تابع باعث توقف اجرای برنامه پیش از رسیدن به تابع می‌شود. بریک پوینت ها را می‌توانید قبل از اجرای کد یا در حین دیباگ کردن برنامه قرار دهید.

  1. بریک پوینت های دارای شرایط

گاهی یک قطعه کد پیش از اینکه با شرایطی که شما می‌خواهید رو به رو شود، ممکن است چندین بار اجرا شود. برای مثال، فرض کنید با یک مجموعه کد کار می‌کنید و بخش ۹۳ام نیاز به دیباگ شدن دارد. می‌توانید بنشینید و ۹۲ بار F5 را بزنید تا به رکوردی که می‌خواهید برسید، یا می‌توانید از یک بریک پوینت شرایط دار استفاده کنید. بریک پوینت های شرایط دار فقط زمانی برنامه را متوقف می‌کنند که شرایط خاص پیش بیاید. این شرایط می‌توانند خیلی ساده باشند(مثلا شمارش تعداد دفعاتی که یک خط اجرا می‌شود). یا می‌توانند خیلی پیچیده تر باشند(مثلا بررسی شود که آیا مقدار True هست یا نه).

بریک پوینت های دارای شرایط

بریک پوینت های دارای شرایط

یکی از ویژگی هایی که در بخش شرایط نادیده گرفته می‌شود، این است که بریک پوینت زمانی که یک مقدار تغییر می‌کند قرار گیرد. اگر سعی دارید بررسی کنید ببینید چه چیزی مقدار چند متغیر را تغییر می‌دهد، این ویژگی بسیار مفید خواهد بود. علاوه بر این، وقتی بریک پوینت قرار داده می‌شود، یک چک باکس برای انجام اعمال مورد نظر وجود دارد. با استفاده از این ویژگی، می‌توانید خیلی سریع به صورت موقت یک برنامه دیگر را در حین اجرای دیباگ کد اجرا کنید.

  1. مشاهده مقدار های بازگشتی

در اکثر موارد، می‌توانید از موس استفاده کنید تا در هنگام دیباگ کردن به سراغ یک متغیر خاص بروید و بررسی کنید ببینید چه مقداری در آن متغیر قرار می‌گیرد. یکی از مکان ها و زمان هایی که نمی‌توانید این کار را انجام دهید، زمانی است که می‌خواهید مقدار بازگشتی از یک تابع را به دست آورید. نمی‌توانید به راحتی با موس روی عبارت بازگشتی کلیک کنید و یک پیش نمایش از مقدار بازگشتی از تابع مشاهده کنید. برای به دست آوردن یک مقدار، می‌توانید دو بخش را بررسی کنید: watch ها و localها.

در پنجره localها، می‌توانید با بررسی نام تابع که پس از آن واژه "returned" نوشته شده است، مقدار بازگشتی را مشاهده کنید. من یک بریک پوینت روی براکت انتهایی از تابع قرار دادم تا مقداری که بازگشت داده می‌شود را مشاهده کنم.

مشاهده مقادیر بازگشتی در پنجره local

مشاهده مقادیر بازگشتی در پنجره local

در پنجره Watch، می‌توانید  با بررسی یک متغیر خاص به نام $ReturnValue مقدار بازگشتی فعلی را مشاهده کنید.

مشاهده مقادیر بازگشتی در پنجره watch

مشاهده مقادیر بازگشتی در پنجره watch

  1. ویرایش مقادیر

اینکه بتوانید یک مقدار را در پنل Watch ببینید یک چیز است، اما اینکه بتوانید آن مقادیر را تغییر دهید یک چیز دیگر است. اگر لازم است نوعی بازگشت مقدار خاص را شبیه سازی کنید یا باید بررسی کنید ببینید اگر یک سری مقادیر خاص و مشکل وارد شوند چه اتفاقی می‌افتد، می‌توانید این کارها را با دستکاری مقادیری که در پنجره locals نمایش داده می‌شوند انجام دهید.

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

OzCode

در زمینه دیباگ کردن Visual Studio در مقایسه با IDEهای دیگر، بهترین نوع IDE را دارد. اضافه کردن OzCode به نوعی موتور کمکی محسوب شده و کار را بسیار تسهیل می‌کند. این قطعه کد مجموعه ای از ویژگی ها را فراهم می‌سازد که باعث می‌شوند دیباگ کردن آسان تر شود.

من به شخصه عاشق تغییراتی هستم که در نمایش کد در هنگام اجرای دیباگ ایجاد می‌شوند. در ویدئوی بالا می‌توانید ببینید که مقادیر متغیرها در درون خطوط کدها بدون اینکه مجبور باشید با موس روی آنها بروید، نمایش داده می‌شوند. علاوه بر این، می‌توانید درون یک object پیچیده یا مجموعه ای از object ها به دنبال مقادیر خاص بگردید.

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

  1. یک بخش تست(unit test)اضافه کنید

گاهی بهترین نوع دیباگ کردن، دیباگ نکردن است. مشکل دیباگ کردن این است که در اکثر مواقع یک فرآیند کند و خسته کننده است. در این فرآیند باید بخش های تست درست کنید، بریک پوینت قرار دهید و کل برنامه رو بررسی کنید تا ببینید کجا نیاز به اصلاح دارد. در گذشته این فرآیند برای من هم خیلی خسته کننده بود. برنامه های گرافیکی به خصوص نیاز به صرف زمان بسیار زیادی برای دیباگ کردن دارند، چون لازم است روی همه کلیدها کلیک کنید تا قسمتی که مشکل دارد را بیابید.

به جای اینکه این فرآیند طولانی و زمان بر را انجام دهید، بهتر است یک unit test ایجاد کنید تا در آن بتوانید تابع شبهه دار را با مقادیری که مد نظر شما است اجرا کنید. تکنیک هایی که تا این قسمت پست ارائه شده اند به شما کمک می‌کنند تا به مرحله ای برسید که تشخیص دهید کدام مقادیر باعث بروز مشکل می‌شوند.

حالا می‌توانید این مقادیر را درون یک unit test خروجی بگیرید تا چرخه و فرآیند دیباگ کردن شما بهتر و مطمئن تر از قبل شود. مسلما می‌توانید کل فرآیند دیباگ را درون unit test ها انجام دهید تا مشکلات کد شما به صفر مطلق برسند.

ابزارهای unit test عالی‌ای وجود دارند، برخی از آنها حتی می‌توانند تست هایی نیز برای شما انجام دهند. با بهره مندی از این ابزار و ایجاد مجموعه ای از unit test ها، می‌توانید تعداد دفعاتی که در آینده مجبور به دیباگ مجدد می‌شوید را به میزان زیادی کاهش دهید. نتیجه نهایی این است که برای تغییر کد در آینده خیلی راحت تر خواهید بود، چون می‌دانید که یک شبکه امن از تست ها در اختیار دارید که می‌توانید از آنها برای تسریع فرآیند کمک بگیرید.

نکته اضافی: با prefix بررسی ها را انجام دهید

ممکن است prefix را فقط به عنوان ابزاری برای بررسی اینکه ببینید کدی که نوشتید واقعا چه کاری انجام می‌دهد، بشناسید. اما این ابزار چیزی فراتر از این حرف ها است. می‌توانید از prefix برای یافتن همه چیز(از n+1 ارور گرفته تا عبارات مخفی و ارائه پیشنهادات اصلاحی برای کد شما)استفاده کنید.

همین‌که به لاگ های ارائه شده توسط prefix نگاه کنید، کافی است تا بتوانید مسیر صحیح برای برطرف کردن باگ ها را بیابید. می‌توانید Prefix را در تمام طول مدت کد نویسی، حتی زمانی که در حال انجام مراحل اولیه توسعه برنامه هستید، اجرا کنید تا بتوانید باگ هایی که در سیستم رایانه شما وجود دارند را یافته و برطرف کنید و در نتیجه دیگر مجبور نخواهید بود فرآیند دیباگ را در فاز تولید انجام دهید.

  1. قرار دادن بریک پوینت در LINQ

کارایی و توانایی LINQ در مرتب سازی، فیلتر کردن و نمایش خیلی راحت و ساده کدها چیزی است که باعث می‌شود بسیاری از برنامه نویسان عاشق آن باشند. قبلا، دیباگ کردن LINQ بسیار پیچیده بود و کمتر کسی توصیه می‌کرد که با LINQ کدنویسی کنید. اما حالا می‌توانید هر دفعه بخش هایی از کوئری را انتخاب و آنها را در پنجره های quick watch یا watch ارزیابی کنید. این امر چیزی است که باعث شده LINQ دوباره محبوب شود.

OzCode  یک شبیه سازی عالی دارد که نشان می‌دهد داده ها در یک کوئری LINQ در هر مرحله چگونه عمل می‌کنند. در زیر یک کوئری مشاهده می‌کنید که چندین کلمه را می‌گیرد، آنها را بر اساس طول فیلتر می‌کند، اولین حرف را می‌گیرد،آنها را گروه بندی می‌کند و حرفی که بیشترین دفعات تکرار دارد را می‌یابد.

این کوئری به شکل مجموعه ای از پنل ها نمایش داده شده است که وضعیت داده ها را پس از انجام یک مرحله نشان می‌دهند. در حال حاضر فقط از شبیه سازی فریمورک کامل کوئری های LINQ پشتیبانی می‌شود اما پشتیبانی از NET. نیز به زودی ارائه خواهد شد.

  1. ارزیابی توابع بدون هیچ عوارض جانبی

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

;static int hitCounter = 0
()public static int GetAndIncrement
{
    ;++return hitCounter
}

هر دفعه این تابع فراخوانی شود، نتیجه متفاوت خواهد بود: ۰ – ۱ – ۲- ۳. اگر این تابع را در یک پنجره quick watch هم ارزیابی کنید همینطور خواهد شد.

هر دفعه که تابع ارزیابی می‌شود، بدون استثنا یک مشکل و عوارض جانبی پیش می‌آید. چنین شرایطی به راحتی در هنگام دیباگ کردن کد قابل تشخیص است. برای پرهیز از تغییر وضعیت برنامه در حال اجرا در هنگام دیباگ کردن، می‌توانید "nse," را به عبارت اضافه کنید.

Adding nse to the expression prevents evaluation

  1. دیباگ کردن NET. در VSCode

اگر روی پروژه ای کار می‌کنید که برای آن از ورژن کامل Visual Studio استفاده نشده است، هنوز هم می‌توانید با بهره مندی از Visual Studio Code یک تجربه دیباگ کردن لذت بخش داشته باشید. تجربه دیباگ کردن در VSCode به خوبی تجربه دیباگ در ورژن کامل VS نیست، اما با این حال باز هم حس خوبش را دارد. ابزارهای خوبی که در OzCode وجود دارند هنوز در VSCode اعمال نشده اند. با استفاده از VSCode می‌توانید از زبان های بسیار متفاوتی پشتیبانی کنید: از جاوا گرفته تا پایتون و #C و همه این زبان ها از طریق مجموعه ای از افزونه ها پشتیبانی می‌شوند.

  1. کمک بگیرید

این نکته احتمالا مهم ترین نکته‌ای است که می‌توانید در هنگام دیباگ کردن کدتان از آن بهره ببرید. یک دوست، همکار یا همکلاسی بیابید و در مورد مشکلی که دارید صحبت کنید. متوجه خواهید شد همین‌که فکرهایتان را روی همدیگر بگذارید کافی است تا جهت صحیح برای رفع مشکل را بیابید. گاهی چنین راه‌حل‌های ساده، کارایی خیلی بیشتری نسبت به استفاده از ابزارهای شیک و سطح بالا دارند.

منبع: Stackify

 

 

مطالب مرتبط

 مقدمه ای بر زبان برنامه نویسی #C و پلتفرم NET Framework.

مقدمه ای بر NLog در هسته ASP.NET

طبقه بندی زبان های برنامه نویسی

چگونه از طریق جاوا (Java)، به یک پایگاه‌داده مای‌اس‌کیوال (MySQL) متصل شویم

۵زبان برتر برنامه نویسی بلاک چین

از آخرین دوره های آموزشی و تخفیف ها مطلع شوید

با تکمیل فرم زیر ، از اخبار و اطلاعات به روز برنامه نویسی و تکنولوژی عقب نمانید

آخرین مطالب

آموزش جامع SQL Server (جلسه ۱۲)
آموزش جامع SQL Server (جلسه ۱۲)

دستور UPDATE در SQL Server برای تغییر داده‌های موجود در یک جدول، از دستور UPDATE به شکل زیر استفاده ...

آموزش جامع SQL Server (جلسه ۱۵)
آموزش جامع SQL Server (جلسه ۱۵)

دستور DROP TABLE در SQL Server گاهی، لازم است یک جدول که دیگر استفاده‌ای ندارد را حذف کنید. برای ...

آموزش جامع SQL Server (جلسه ۳۵: Window Functionها – بخش ۲)
آموزش جامع SQL Server (جلسه ۳۵: Window Functionها – بخش ۲)

بخش اول از آخرین مبحث دوره جامع آموزش SQL Server در جلسه قبلی بررسی شد. این مبحث که ...

آخرین دیدگاه ها

دیدگاه خود را درباره این پست بنویسید

فرم ارسال نظرات