سلام با آموزش برنامه نویسی سی شارپ در خدمت شما عزیزان هستیم
لينك قسمت اول آموزش سی شارپ : آموزش #C
لينك قسمت اول آموزش اشکال زدایی: قسمت اول
در هنگام انجام عمل اشکال زدایی کدها یا Debugging در ویژوال استودیو، پنجره tool window در قسمت پایین برنامه عوض شده و پنجره های جدیدی ظاهر می شوند (علی رغم این که شما آن ها را خاموش یا غیر فعال کرده باشید). پنجره های جدید باز شده با نام “Locals”، “Watch”، “Call Strack” و “Immediate window” بوده، که مرتبط با عملیات Debugging هستند. در این بخش به بررسی هریک از ابزارها خواهیم پرداخت.
این پنجره، ساده ترین ابزار این بخش می باشد. هنگامی که برنامه به یک Breakpoint می رسد، تمامی متغیرهای محلی کد یا variables local در این پنجره لیست شده و به شما امکان می دهد تا با یک نگاه سریع اطلاعاتی مثل نام، نوع و مقدار آنها را مشاهده نمایید. شما حتی می توانید بر روی نام متغیر مورد نظر خود در جدول کلیک نموده و با انتخاب آیتم “Edit Value”، به متغیر انتخاب شده یک مقدار جدید بدهید. این کار امکان امتحان کردن کدهای برنامه را در شرایط مختلف دیگر می دهد.
پنجره Watch Window تا حدودی شبیه پنجره Locals است. با این تفاوت که در این پنجره می توانید تصمیم بگیرید کدام یک از متغیرها به عنوان محلی local یا سراسری global تعیین شوند. شما می توانید متغیر مورد نظر خود را به محل درگ کردن از کد صفحه، یا پنجره Locals و یا نوشتن نام آن در آخرین خط خالی، تحت نظر گرفته و به پنجره Watch اضافه کنید. متغیرهای لیست Watch تا زمانی که آن ها را حذف نکنید، در پنجره باقی خواهند ماند، اما مقدارشان فقط در زمانی که وارد محدوده کد مرتبط با آن ها بشوید، به روز می شود. برای مثال، یک متغیر متعلق به تابع A در زمانی که درون کد تابع B باشید، Update نمی شود. همانند پنجره Locals می توانید بر روی متغیر مورد نظر خود کلیک راست کرده و با انتخاب گزینه “Edit Value”، مقدار آن را تغییر دهید.
پنجره Call Stack ، سلسله مراتب یا hierarchy اجرای توابع برنامه را نشان می دهد. برای مثال اگر تابع A تابع B را فراخوانی کرده و تابع B تابع C را فراخوانی می کند، این ارتباطات را می توانید در پنجره Call stack مشاهده کرده و بر روی کد هر یک از تابع ها در صورت تمایل پرش کنید. شما همچنین می توانید ببینید چه پارامترهایی به هر تابع پاس داده می شوند.
کد مثال های این درس، بسیار ساده بودند و به راحتی می توانید مسیر پیمایش تابع را مشاهده کنید. اما در پروژه های بزرگ، فهمیدن ترتیب اجرای توابع و پارامترهای هریک از آن ها، امر ضروری بوده که با Call stack می توان انجام داد.
پنجره Immediate Window می تواند کاربردی ترین پنجره عملیات Debug باشد. این پنجره به شما امکان می دهد، بخش های مورد نظر خود را از کد برنامه انتخاب کرده و اجرا نمایید. همچنین می توانید مقادیر متغیرهای آن ها را چک کرده و یا تغییر دهید.
فقط کافی است کد مورد نظر خود را در پنجره نوشته و با زدن دکمه Enter آن را اجرا نمایید. نام هر متغیر را تایپ نموده و مقدار آن را در خروجی چاپ کنید. مقدار متغیر مورد نظر خود را با نوشتن a=5 تغییر داده و همان لحظه نتیجه تغییر را در کد مشاهده کنید. پنجره Immediate Window همانند یک ترمینال در C# است، به محض نوشتن کد یا تغییر در برنامه، خروجی را مشاهده خواهید کرد.
در درس های قبل، یک Breakpoint ساده را ایجاد کردیم. اما امکانات بسیار بیشتری در هنگام کار با Breakpoint ها، به خصوص در محیط ویژوال استودیو وجود دارد. البته به نظر می رسد، مایکروسافت برخی از این قابلیت ها را در نسخه های Express ویژوال استودیو، غیر فعال کرده است، اما این امکانات در نسخه فوق همچنان در دسترس است.
این Condition به شما امکان می دهد تا یک شرط را تعیین کرده و زمانی که آن شرط درست یا true شد یا مقدارش تغییر کرد، breakpoint رخ دهد. این قابلیت، در زمانی که با کدهای سطح بالاتر در تعامل هستید، بسیار کاربردی است. برای مثال هنگامی که می خواهید عملیات اجرای برنامه تحت شرایط خاصی متوقف شود. برای مثال، فرض کنید که یک حلقه loop دارید که تا قبل از رسیدن به کد مورد نظر، چندین بار تکرار می شود. در چنین شرایطی می توانید با تعیین یک شرط یا Condition مورد نظر و اضافه کردن آن به breakpoint، شرایط را کنترل کنید. مثال زیر را برای نشان دادن قابلیت Condition ایجاد کرده ایم :
static void Main(string[] args)
{
for(int i = 0; i < 10; i++)
Console.WriteLine("i is " + i);
}
برک Breakpoint را برروی خط کدی که خروجی را بر روی Console نمایش می دهد، قرار دهید. سپس برنامه را اجرا کنید. Breakpoint هر بار که حلقه تکرار می شود، رخ می دهد. اما این چیزی نیست که ما دنبال آن هستیم. ممکن است بخواهیم breakpoint فقط در زمانی که i برابر با 4 است (دفعه 5 ام تکرار حلقه) فعال شود. بنابراین شرط i==4 را به Breakpoint اضافه می کنیم.
اکنون Breakpoint با یک دایره سفید درون آن نشان داده شده و می گوید که برای اجرا دارای یک شرط است و زمانی اجرا می شود که مقدار متغیر i برابر 4 شود.
شما همچنین می توانید گزینه “has changed” را اضافه کرده تا به debugger بگویید فقط در زمانی که نتیجه عبارت فوق تغییر کرد، breakpoint را فعال کند، مثلا وقتی که مقدار آن از true به false عوض شد.
با استفاده از قابلیت Hit Count می توانید شرط دیگری را برای اجرای Breakpoint تعیین کرده که بر حسب تعداد دفعاتی خواهد بود که Breakpoint در کد روی می دهد.
برای مثال، می توانید تصمیم بگیرید که Breakpoint، تعداد دفعات مشخصی در کد تکرار نشده باعث توقف اجرای برنامه شود. تنظیمات مختلفی برای این شرط وجود دارد که می توانید در هنگام کار عملی، آن ها را در سطح برنامه تغییر دهید.
به وسیله این پنجره می توان رفتار متفاوتی را برای برنامه در هنگام رسیدن Breakpoint تعیین کنید. این امکان، بیشتر در مواردی کاربرد دارد که نمی خواهید برنامه با رسیدن به Breakpoint متوقف شده، به جای آن یک پیام خاصی منتشر شده یا یک macro اجرا شود. این قابلیت به شما امکان می دهد تا یک پیام دلخواه را تعیین کرده و اطلاعات خاصی را در برنامه روند اجرا برنامه چاپ کنید. در کدهای پیشرفته تر، می توانید یک macro را تعیین نموده تا به محض رسیدن برنامه به نقطه Breakpoint، اجرا شود.