سلام با آموزش برنامه نویسی سی شارپ در خدمت شما عزیزان هستیم
لينك قسمت اول : آموزش #C
در پروژه های بزرگ، معمولا حجم کدنویسی به اندازه ای زیاد می شود که گاهی اوقات برنامه نویسان خودشان هم کاملا بر روی کد پروژه تسلط نداشته و جز با اجرای آن نمی توانند موفقیت برنامه را در عمل متوجه بشوند.
چیزی که شما به آن نیاز دارید، تقریبا همانند کلاه شعبده بازهاست تا به وسیله آن بتوانید درون برنامه خود را باز کرده و در هنگام اجرا، ببندید واقعا چه پروسه ای در جریان است؟!
عمل اشکال زدایی کدها یا Debugging همان کلاه شعبده بازی مورد نظر است. ابزاری که پس از آشنا شدن و یادگیری کار با آن، تقریبا دیگر نمی توان بدون استفاده از Debugging کد بنویسید. Debugging ابزاری است که هر برنامه نویس بایستی آن را به خوبی شناخته و کار با آن را یاد بگیرید. زیرا عملا بدون استفاده از ابزار، اصلاح اشکالات یا bug های کدتان غیر ممکن است.
ساده ترین حالت اشکال زدایی یا Debugging، که هنوز حتی توسط کد نویسان حرفه ای مورد استفاده قرار می گیرد، روش “print debugging” است. روشی که در آن برنامه نوشته یا عددی را در جاهای مختلف کد نشان می دهد تا متوجه شوید که در هر زمان چه بخشی از کد در حال اجراست و هر متغیر در هر مرحله دارای چه مقداری است.
آموزش سی شارپ
در زبان C#، می توانید از متد CONSOLE.write برای نمایش مقدار یک متغیر در خروجی و یا چاپ یک عبارت متنی استفاده کنید. این متن ها و مقادیر بر روی صفحه یا Console ظاهر می شوند. این کار در برخی موارد کافی به نظر می رسد. اما اگر شما یک نرم افزار IDE خوب مثل Visual Studio کار می کنید، ابزارهای بسیار کاربردی تر و ساده ای را برای انجام اشکال زدایی و کنترل کد در اختیار خواهید داشت.
در درس های بعدی به آموزش تکنیک های اشکال زدایی و نحوه کار با کنترل کننده کدها در ابزارهای برنامه نویسی IDE مثل ویژوال استودیو خواهیم پرداخت.
اولین چیزی که بایستی در عملیات اشکال زدایی کدهای C# یا Debugging بایستی بیاموزید، استفاده از BreakPoints ها است. BreakPoints دقیقا همان کاری را انجام می دهد که از نام آن می توان فهمید. BreakPoint نقطه ای در کد شما را تعیین می کند که در آنجا کامپایلر توقف نموده و اجرای برنامه موقتا استپ می شود. در این مکان می توانید به بررسی کدهای خود پرداخته و مقادیر متغیرها و عبارات را در برنامه چک کنید.
برای قرار دادن BreakPoint در محیط ویژوال استودیو، بایستی بر روی لبه کناری برنامه و هم ردیف با کدی که می خواهید اشکال زدایی کنید، کلیک راست نموده و برنامه برای شما یک دایره قرمز رنگ به نشانه BreakPoint قرار می دهد.
آموزش سی شارپ
برای درک بهتر، قطعه کد زیر را در محیط ویژوال استودیو کپی کرده و در کنار آن یک BreakPoint ایجاد نمایید
namespace DebugTest
{
class Program
{
static void Main(string[] args)
{
int a = 5, b = 8, c = 233;
int d = a + c - b;
Console.WriteLine(d);
}
}
}
کد مثال فوق، کد بسیار ساده ای بوده و شما حتی با یک ماشین حساب می توانید مقدار متغیر را در هر لحظه حساب کرده و کد خود را چک نمایید. اما در پروژه های بزرگ، انجام این کار به صورت دستی تقریبا غیر ممکن است.
همانند تصویر زیر، یک BreakPoint در کنار خط کد نشان داده شده، ایجاد نمایید :
اکنون شما آماده اید تا اولین عملیات اشکال زدایی صفحات یا Debugging خود در C# را انجام دهید. با زدن دکمه F5 برنامه را اجرا نمایید. چیزی که رخ خواهد داد این است که برنامه مثل حالت طبیعی اجرا شده و زمانی که به خط کد دارای Breakpoint برسد، عملیات پردازش برای چک کردن کد متوقف می شود. در کد فوق، متغیرهای a و b و c دارای مقدار هستند، ولی در خط مشخص شده متغیر d هنوز مقداردهی نشده و مقدار پیش فرض برای integer یعنی صفر را دارا می باشد. پس از اجرای این خط کد است که متغیر d مقدار جدید خود را کسب می کند.
حالا می رسیم به قسمت هیجان انگیز برنامه، موس را بر روی نام متغیرهای مختلف کد ببرید. یک tooHip باز می شود که به شما اعلام می کند هر متغیر در آن لحظه، دارای چه مقداری است.
همان طور که اشاره کردیم، متغیر d تا اجرای این خط، دارای مقدار پیش فرض صفر است. اما با حرکت و به جلو رفتن اجرای برنامه، می توان مقدار آن را تغییر داد. در درس بعدی، به آموزش نحوه حرکت در کدهای برنامه و بررسی بیشتر عملیات Debugging خواهیم پرداخت.
در این درس، به آموزش نحوه حرکت بین کدها در زمان Debug برنامه های C# خواهیم پرداخت. برای این منظور، برنامه ای با کد زیر را نوشته ایم :
namespace DebugTest
{
class Program
{
static void Main(string[] args)
{
int a = 5;
a = a * 2;
a = a - 3;
a = a * 6;
Console.WriteLine(a);
}
}
}
کد مثال فوق، چندین بار بر روی متغیر a عملیات ریاضی انجام داده و سپس نتیجه نهایی را در خروجی چاپ می کند. همان گونه که در درس قبل نشان دادیم، در کنار خطی اولی که متغیر a تعریف و مقداردهی شده است، یک Breakpoint قرار دهید. سپس پروژه را اجرا نمایید. در خط اول ای که Breakpoint قرار داده اید، اجرای برنامه متوقف شده و می توانید با بردن موس بر روی متغیر a، مقدار آن را در لحظه مشاهده نمایید. در این مرحله، متغیر a دارای مقدار پیش فرض متغیرهای عددی یعنی صفر است، زیرا هنوز کد آن خط اجرا نشده است. اما بیایید کمی روند را تغییر دهیم.
از منوی Debug ، گزینه “Step over” را انتخاب کرده و یا دکمه F10 را فشار دهید. در این حالت، خط کد بعدی برنامه اجرا شده و می توانید با حرکت موس بر روی کد ببینید که اکنون متغیر a دارای مقدار است. مجددا با زدن دکمه F10 به حرکت در خط های کد ادامه داده و هر خط را یک به یک اجرا کرده و مقدار متغیر آن را در آن خط بسنجید، تا این که به انتهای کد برسید.
مثال فوق بسیار ساده ولی در عین حال کاربردی بود، اکنون می توانیم وارد مراحل پیشرفته تر بشویم.
در کد مثال زیر، یک برنامه پیچیده تر از مثال قبلی طراحی کرده ایم. در کد مثال قبل، جریان حرکت برنامه بسیار ساده و خطی بود. اما اگر کد ما در بین توابع و کلاس های مختلف حرکت کند، چه؟ برای این منظور به کد مثال زیر دقت کنید :
namespace DebugTest
{
class Program
{
static void Main(string[] args)
{
int a = 5;
int b = 2;
int result = MakeComplicatedCalculation(a, b);
Console.WriteLine(result);
}
static int MakeComplicatedCalculation(int a, int b)
{
return a * b;
}
}
}
در خط اول متد Main برنامه یک Breakpoint قرار داده و آن را اجرا نمایید. سپس از دکمه F10 برای حرکت بین خطوط برنامه و اجرای کدها استفاده کنید. همانطور که مشاهده خواهید کرد، برنامه از روی کد فراخوانی تابع بدون توجه عبور می کند. این حالت روش پیش بینی فرض Debugger است. اما بار دیگر اجرای کد را از اول شروع کرده و هنگام رسیدن به خط کد فراخوانی تابع Make Calculation()، از منوی Debug گزینه Step into را انتخاب کرده یا کلید میانبر F11 را فشار دهید. در این هنگام، برنامه وارد عملیات فراخوانی تابع شده و بدنه تابع را به صورت کامل پیمایش می کند. بنابراین با زدن دکمه F11 می توانید ریزعملیات اجرایی برنامه را هم بررسی کنید.
اما اگر وارد یک تابع شدید و در میانه راه خط هستید از مشاهده ادامه روند اجرای تابع صرف نظر کرده و به کد اصلی برنامه باز گردید، می توانید از منوی Debug گزینه “step out” را انتخاب کرده و یا دکمه shift +F11 را همزمان فشار دهید. در این حالت برنامه به ادامه کد پس از تابع بازگشته و به این صورت می توانید هرچند بار که خواستید وارد فراخوانی یک تابع شده و سپس در هنگام لزوم از آن خارج شوید.