خوش آموز درخت تو گر بار دانش بگیرد، به زیر آوری چرخ نیلوفری را


آموزش زبان ++C : اشکال زدایی (Debugging) برنامه ها قسمت دوم

آموزش زبان ++C : اشکال زدایی (Debugging) برنامه ها قسمت دوم
نویسنده : امیر انصاری
در آموزش قبلی در مورد دیباگر (debugger) و کاربردهای آن اطلاعاتی را کسب کردید. حالا می دانید که چگونه با استفاده از دیباگر (debugger) می توانید برنامه های خود را خط به خط اجرا کنید، برنامه را در جای خاصی متوقف کنید و آن را مورد بررسی قرار بدهید. در این درس در ادامه آن آموزش به موضوع بررسی و مشاهده مقادیر متغیرها در هنگام دیباگ کردن برنامه ها می پردازیم.

سیستم یکپارچۀ سازمانی راهکار



Watching variables (مشاهده مقادیر متغیرها)


در هنگام دیباگ کردن برنامه شما این امکان را دارید تا مقادیر متغیرها را مشاهده نمایید. بیایید به یک برنامه نمونه نگاهی بیندازیم :

#include "stdafx.h"
#include "iostream"

int main()
{
int x =1;
std::cout << x << " ";

x = x + 1;
std::cout << x << " ";

x = x + 2;
std::cout << x << " ";

x = x + 4;
std::cout << x << " ";

return 0;
}

این یک برنامه ساده است که مقادیر 1، 2، 4 و 8 را در نمایشگر چاپ می کند.

ابتدا با استفاده از دستور Run to cursor برنامه را تا اولین بیانیه std::cout اجرا کنید تا در آنجا برنامه متوقف شود.

آموزش زبان ++C : اشکال زدایی (Debugging) برنامه ها قسمت دوم
در این مرحله، متغیر x ایجاد شده است و با مقدار 1 مقدار دهی اولیه شده است، بنابراین اگر ما بتوانیم تا اینجای کار مقدار این متغیر را مورد بررسی قرار دهیم انتظار می رود تا این متغیر مقدار 1 را در خودش داشته باشد.

ساده ترین راه مشاهده مقدار متغیر x اینست که نشانگر ماوس را اندکی روی آن شناور نگهداریم.

آموزش زبان ++C : اشکال زدایی (Debugging) برنامه ها قسمت دوم
توجه داشته باشید که می توانید با شناور نگهداشتن نشانگر ماوس بر روی همه متغیرهای x در برنامه مقدارش را مشاهده کنید و محدود به خط جاری نمی باشید.

آموزش زبان ++C : اشکال زدایی (Debugging) برنامه ها قسمت دوم
همچنین برای مشاهده مقدار متغیر می توانید از دستور QuickWatch نیز استفاده نمایید. برای انجام این کار ابتدا متغیر مربوطه را انتخاب کنید تا هایلایت گردد و سپس بر روی آن راست کلیک کرده و از منوی ظاهر شده گزینه QuickWatch را انتخاب کنید.

آموزش زبان ++C : اشکال زدایی (Debugging) برنامه ها قسمت دوم
کادر محاوره ای QuickWatch نمایان می شود و مقدار متغیر مربوطه مشابه تصویر زیر قابل دیدن خواهد بود.

آموزش زبان ++C : اشکال زدایی (Debugging) برنامه ها قسمت دوم
پنجره QuickWatch را ببندید و ادامه بدهید.

دستور Step over را دوبار اجرا کنید تا به بیانیه std::cout بعدی برسید.

آموزش زبان ++C : اشکال زدایی (Debugging) برنامه ها قسمت دوم
در حال حاضر انتظار می رود که مقدار متغیر x برابر با 2 باشد. با روشی که در همین درس آموختید مقدار آن را بررسی کنید.

پنجره watch


اگر بخواهید مقدار یک متغیر را در یک زمان خاص و مشخص مورد بررسی قرار بدهید استفاده از پنجره QuickWatch و همینطور استفاده از روش شناور نگهداشتن نشانگر ماوس بر روی متغیر مربوطه روش خوبی می باشد. اما اگر بخواهید تغییرات مقادیر متغیرها را در طول اجرای کد مدام رصد کنید این روش اندکی سخت می باشد و زیاد مناسب نمی باشد.

در این وضعیت پنجره watch می تواند به شما کمک شایانی کند. در پنجره watch شما می توانید متغیرهایی را اضافه نمایید و همزمان که برنامه را خط به خط اجرا می کنید تغییرات مقادیر آن متغیرها را که به صورت اتوماتیک بروز رسانی می شوند، رصد کنید. پنجره watch ممکن است در صفحه شما نمایان باشد، اگر اینطور نباشد در هنگام دیباگ کردن برنامه وارد منوی Debug شوید و سپس Windows و سپس Watch و در نهایت Watch 1 را انتخاب کنید.

تصویر زیر پنجره watch را به شما نشان می دهد.

آموزش زبان ++C : اشکال زدایی (Debugging) برنامه ها قسمت دوم
البته هنوز در پنجره watch متغیری مشاهده نمی شود، چرا که هنوز چیزی را به آن اضافه نکرده ایم. برای افزودن متغیرها به پنجره watch دو روش وجود دارد.

  1. نام متغیر مورد نظرتان را در زیر ستون Name وارد نمایید.
  2. متغیر مورد نظر را انتخاب کنید تا هایلایت شود و سپس روی آن با ماوس راست کلیک کرده و گزینه Add Watch را انتخاب کنید.

با یکی از این روش ها متغیر x را به پنجره watch اضافه کنید.

آموزش زبان ++C : اشکال زدایی (Debugging) برنامه ها قسمت دوم
حالا با استفاده از دستور Step over برنامه را پیش ببرید و همزمان پنجره watch را نیز زیر نظر داشته باشید. خواهید دید که مقدار این متغیر به صورت اتوماتیک با پیش بردن برنامه، تغییر خواهد کرد.

توجه داشته باشید که حتی اگر محدوده (scope) متغیر نیز تمام شود، باز هم متغیر در پنجره watch وجود خواهد داشت تا در فراخوانی های بعدی برنامه به سادگی بتوانید آن را مشاهده نمایید.

استفاده از پنجره watch بهترین روش برای رصد کردن مقدار یک متغیر در طول اجرای برنامه می باشد.

پنجره call stack


ابزارهای دیباگر (debugger) مدرن یک امکان مفید دیگر با نام پنجره call stack دارند که خوشبختانه در ویژوال استودیو نیز از آن بهره مند هستید.

هنگامی که برنامه شما یک تابع را فراخوانی می کند، شما می دانید که کامپایلر محل فراخوانی را برای خودش نشانه گذاری (bookmark) می کند، سپس تابع مربوطه را فراخوانی می کند و سپس به محل نشانه گذاری باز می گردد و اجرای برنامه را از همان نقطه از سر می گیرد. اما کامپایلر از کجا می داند که باید دقیقاً به چه محلی باز گردد؟ پاسخ اینست که کامپایلر این نشانه گذاری ها را در جایی (با نام پشته یا stack) ثبت می کند.

در واقع call stack لیستی از کلیه توابع فعال می باشد که تا هنگام رسیدن به نقطه خاصی فراخوانی شده اند. call stack به ازاء هر تابع تا خطی از برنامه که در حال اجرا شدن می باشد یک رکورد ردیابی در خودش دارد. هر گاه که یک تابع جدید فراخوانی می شود، آن تابع به بالای call stack اضافه می شود. هر گاه هم که تابع مربوطه مقدارش را به تابع فراخوانی کننده باز می گرداند از call stack حذف می گردد.

اگر پنجره call stack را نمی بینید می توانید با استفاده از منوی Debug و سپس Windows و در نهایت Call Stack آن را مشاهده نمایید. توجه داشته باشید که برنامه باید در حالت دیباگ باشد.

بیایید با استفاده از یک برنامه نمونه call stack را مورد بررسی قرار دهیم :

#include "iostream"

void CallC()
{
std::cout << "C called" << std::endl;
}

void CallB()
{
std::cout << "B called" << std::endl;
CallC();
}

void CallA()
{
CallB();
CallC();
}

int main()
{
CallA();

return 0;
}

یک breakpoint در کنار تابع CallC قرا بدهید و سپس برنامه را اجرا کنید. برنامه اجرا می شود و هنگامی که به محل breakpoint رسید، متوقف می گردد.

اگر چه شما می دانید که برنامه مشغول اجرای تابع CallC می باشد، اما واقعیت اینست که تابع CallC دو بار فراخوانی شده است، یکبار در تابع CallB و یک بار هم در تابع CallA فراخوانی شده است. اما الان دقیقاً کدام تابع فراخوانی کننده در دست اجرا می باشد؟ پنجره call stack این موضوع را به ما نشان می دهد.

آموزش زبان ++C : اشکال زدایی (Debugging) برنامه ها قسمت دوم

آموزش قبلی : آموزش زبان ++C : اشکال زدایی (Debugging) برنامه ها

آموزش بعدی : آموزش زبان ++C : متغیرها : معرفی، مقدار دهی اولیه و انتساب



نمایش دیدگاه ها (0 دیدگاه)

دیدگاه خود را ثبت کنید:

انتخاب تصویر ویرایش حذف
توجه! حداکثر حجم مجاز برای تصویر 500 کیلوبایت می باشد.