پلتفرم Java SE با محیط توسعه IDE) NetBeans) ؛ (5)

این نمونه کد با دستور System.out.println سعی می کرد علامت های دیداری به خروجی اضافه کند. گاهی اوقات زمانیکه برنامه ها غلط بود، پشته ی trace معنادار یا خطی که در آن خطا اتفاق افتاده را نداشتید.
دوشنبه، 4 آذر 1392
تخمین زمان مطالعه:
موارد بیشتر برای شما
پلتفرم Java SE با محیط توسعه IDE) NetBeans) ؛ (5)

پلتفرم  Java SE  با محیط توسعه ی(IDE) NetBeans(5)

 

مترجم: حبیب الله علیخانی
منبع:راسخون



 

دیباگ یا اشکال زدایی

توسعه دهنده ها از روش های مختلفی برای دیباگ استفاده می کنند
در ابتدا برنامه نویسان جاوا کد هایی مانند زیر می نوشتند :

public class BadDebugExample {
public static void main(String[] args)
{
System.out.println("1");
Calculator calc = new Calculator();
System.out.println("2");
String results = calc.doCalculation(4);
System.out.println("3");
String results2 = calc.doCalculation(5);
System.out.println("4");
String results3 = calc.doCalculation(6);
}
}

این نمونه کد با دستور System.out.println سعی می کرد علامت های دیداری به خروجی اضافه کند. گاهی اوقات زمانیکه برنامه ها غلط بود، پشته ی trace معنادار یا خطی که در آن خطا اتفاق افتاده را نداشتید.
با اضافه کردن System.out.println در کد قبل ، یک روش زمخت برای trace برنامه بود ، اما netbeans راه های آسانتری به نام debugging tools ارائه کرد .
دیباگ کد های جاوا در IDE شامل مراحل خط به خط میان کد های برنامه است.شما می توانید اجرای برنامه را در خطوط خاصی ( breakpoint ها) متوقف کنید یا مقادیر متغییر ها و اشیا را ببینید.
بعضی از فعالیت هایی که دیباگ IDE انجام می دهد شامل زیر می باشد :
1- متوقف کردن برنامه در خط خاص
2- اجرای یک خط
3- پرش از روی یک خط از کدی که نمی خواهیم اجرا شود
4- اجرای برنامه تا زمانی که به جایی که مکان نما(cursor) قرار گرفته
5- دیدن پشته ی فراخوانی تا خط خاص
6- دیدن متغییر محلی
7- دیدن مقدار متغییر کلاس
8- ارزیابی مقدار بازگشتی یک متد بدون اینکه داخل آن برود
9- Trace کردن برنامه در طول نخ های چندگانه
10- توقف اجرای برنامه با شرط روی یک خط خاص
11- تغییر مقدار متغییر ها زمان اجرا برای دیدن اینکه چه تاثیری روی برنامه دارد.

Breakpoints

Breakpoint یک مفهوم مهم در دیباگ است و علامت ها و نشانه هایی را در جایی که می خواهیم اجرای برنامه متوقف شود قرار می دهد. برای دیباگ باید حد اقل یک breakpoint داشته باشید.
با چند روش می توان آن را در کد قرار داد.

ایجاد Breakpoint

1- برای ایجاد breakpoint روی روی نوار سمت چپ یعنی جایی که شماره خط وجود دارد کلیک می کنیم و یک خط صورتی رنگ طولانی ایجاد می شود.
پلتفرم Java SE با محیط توسعه IDE) NetBeans) ؛ (5)
وقتی برنامه دیباگ می شود اجرای برنامه روی هرکدام از خطوطی که breakpoint قرار دارد متوقف می شود.
2- راه دیگری برای اضافه کردن breakpoint وجود دارد. ابتدا خطی را که می خواهیم breakpoint قرار دهیم را
انتخاب می کنیم و سپس مسیر روبرو : > Toggle Line Breakpoint Debug
3- راه دیگری برای اضافه کردن breakpoint نوعی متفاوت وجود دارد که می توانیم class breakpoint اضافه کنیم
این روش اجازه می دهد که اجرای برنامه را زمانیکه کلاسی از ماشین مجازی جاوا load یا unload می شود متوقف کند.
از مسیر روبرو: Debug > New Breakpoint
در قسمت Breakpoint Type ، Class را انتخاب می کنیم
پلتفرم Java SE با محیط توسعه IDE) NetBeans) ؛ (5)
در فیلد Class Name نام کامل کلاس را وارد می کنیم
در قسمت Stop on :
Class Load : اجرای برنامه را وقتی که کلاس مورد نظر به JVM (ماشین مجازی جاوا ) load می شود ، متوقف می کند.
Class Unload : اجرای برنامه را وقتی که کلاس مورد نظر از JVM (ماشین مجازی جاوا ) unload می شود، متوقف می کند.
Class Load or Unload : اجرای برنامه را وقتی که کلاس مورد نظر به JVM ، load یا از JVM ، unload می شود ، متوقف می کند.
قسمت Condition به شما اجازه می دهد که یک یا چند کلاسی را استثنا بگیرید. و در پایین می توانید تعداد break را اختصاص دهید.
بخش Actions قسمتی است که تعیین می کند که هنگامی که به breakpoint می رسد چه اتفاقی بیافتد.

حذف Breakpoint

برای حذف breakpoint روی آن کلیک کرده و آن را ناپدید می کنیم.

غیر فعال کردن Breakpoint

در شکل زیر تیک نشان داده شده را بر می داریم:
پلتفرم Java SE با محیط توسعه IDE) NetBeans) ؛ (5)

و رنگ آن خاکستری می شود.

Debugging دیباگ یک پروژه

برای دیباگ باید حد اقل یک breakpoint داشته باشید.
وقتی که اولین بار اجرای برنامه متوقف می شود ، شما می توانید از طریق آپشن های زیر برنامه را trace کنید:
پلتفرم Java SE با محیط توسعه IDE) NetBeans) ؛ (5)

پلتفرم Java SE با محیط توسعه IDE) NetBeans) ؛ (5) Step Over : یک خط از کد را اجرا می کند. اگر این خط فراخوانی یک تابع باشد، تابع را بدون اینکه به داخل تابع برود اجرا می کند
پلتفرم Java SE با محیط توسعه IDE) NetBeans) ؛ (5) Step Into : یک خط از کد را اجرا می کند. اگر این خط فراخوانی یک تابع باشد، به داخل تابع می رود و در اولین خط آن متوقف می شود.
پلتفرم Java SE با محیط توسعه IDE) NetBeans) ؛ (5) Step out : یک خط از کد را اجرا می کند. اگر آن خط داخل یک تابع باشد، باقیمانده کد تابع را اجرا می کند مقدار بازگشتی فراخوانی تابع را برمی گرداند.
پلتفرم Java SE با محیط توسعه IDE) NetBeans) ؛ (5) Run To Cursor : خطی که مکان نما در آن قرار دارد را اجرا می کند.
پلتفرم Java SE با محیط توسعه IDE) NetBeans) ؛ (5) Continue : اجرای برنامه را تا رسیدن به Breakpoint بعدی یا اتمام برنامه ادامه می دهد.
ابتدا اگر پنجره output در پایین باز نباشد از مسیر روبرو آنرا باز می کنیم Window > Outpu t > Output
IDE کد را کامپایل می کند و چند پنجره دیباگ باز می کند، مانند : Debugging و Debugging Console مانند شکل زیر:
پلتفرم Java SE با محیط توسعه IDE) NetBeans) ؛ (5)
تب Debugging کنترل های ابتدایی هنگام دیباگ فراهم می کند. دو آیکن در کناره سمت چپ می بینید. بعد از دیباگ کردن ،
ایکن سبز می شود و قابل کلیک کردن است، این آیکن شما را به دیباگ قبلی بر می گرداند. تب Debugging Console شامل خروجی های استاندارد است
روش های مختلفی برای دیباگ در netbeans وجود دارد.

1- روش اول: از منوی Debug :

اگر Main Projectپروژه اصلی نداشته باشد،
پلتفرم Java SE با محیط توسعه IDE) NetBeans) ؛ (5)
1- دو حالت دارد، یکی اینکه پروژه چند کلاس و یک کلاس main مجزا داشته باشد و بخواهیم پروژه را از main دیباگ کنیم گزینه زیر را انتخاب می کنیم:
(Ctrl+F5 ) project Debug > Debug
پلتفرم Java SE با محیط توسعه IDE) NetBeans) ؛ (5)

2- اگر بخواهیم یک فایل کلاس را (بدون اینکه کل پروژه را دیباگ کنیم) دیباگ کنیم ، گزینه زیر را انتخاب می کنیم:
پلتفرم Java SE با محیط توسعه IDE) NetBeans) ؛ (5)

کللاسی که انتخاب می کنید باید main داشته باشد وگرنه پیغام زیر را می دهد:
پلتفرم Java SE با محیط توسعه IDE) NetBeans) ؛ (5)
اگر Main Projectپروژه اصلی داشته باشد:
اگر در چند پروژه داشته باشید و یکی از پروژه ها را به عنوان پروژه اصلی main project در نظر بگیرید ، یعنی هنگام ساخت یکی از پروژه ها، گزینه ی set as main project را تیک زده باشید
در پنجره project یکی از آنها پر رنگ تر می شود ( بدیهی است که فقط یک پروژه می تواند main project باشد)
پلتفرم Java SE با محیط توسعه IDE) NetBeans) ؛ (5)
فرض کنید که چند پروژه داریم و هنگام ایجاد آنها، هیچکدام آنها را main project قرار نداده ایم و اکنون می خواهیم یکی را main project در نظر بگیریم:
یا روی آن کلیک کرده و آن را main project در نظر می گیریم :
پلتفرم Java SE با محیط توسعه IDE) NetBeans) ؛ (5)
یا در فضای خالی پنجره project کلیک راست کرده و گزینه های نشان داده شده ی زیر را انتخاب می کنیم:
پلتفرم Java SE با محیط توسعه IDE) NetBeans) ؛ (5)
اگر خواستیم پروژه ای را از حالت main project خارج کنیم :
پلتفرم Java SE با محیط توسعه IDE) NetBeans) ؛ (5)
اکنون به ادامه بحث دیباگ با در نظر داشتن پروژه ای به عنوان main project می پردازیم:
اگر بخواهیم پروژه ای که main project است را دیباگ کنیم ، نیاز به انتخاب آن نیست و کافی است :
(Ctrl+F5 ) Main project Debug > Debug
پلتفرم Java SE با محیط توسعه IDE) NetBeans) ؛ (5)
اما اگر بخواهیم پروژه ای که main project نیست را دیباگ کنیم، فایل main آن پروژه را انتخاب می کنیم و در منوی Debug فقط debug file را میزنیم و اگر Debug main project را بزنیم فقط main project را دیباگ می کند.
پلتفرم Java SE با محیط توسعه IDE) NetBeans) ؛ (5)

این روش برنامه را اجرا می کند تا به اولین breakpoint برسد . می توانید از طریق آپشن های گفته شده در بالا برنامه را trace کنید. اگر breakpoint ای نداشته باشیم، برنامه run می شود تا به پایان برسد.

2- روش دوم : از مسیر روبرو: Debug > Run To Cursor

پلتفرم Java SE با محیط توسعه IDE) NetBeans) ؛ (5)
این روش برنامه را تا اولین خطی که موس رو ی آن قرار دارد ادامه می دهد
مثال : کلاس calculator را بسازید و کد های زیر را در آن وارد کنید و در خط 11 یک breakpoint قرار دهید:
پلتفرم Java SE با محیط توسعه IDE) NetBeans) ؛ (5)
وقتی که دیباگ را شروع می کنید، اجرا در خط 11 متوقف می شود و تب Debugging Console پیغام زیر را می دهد:
پلتفرم Java SE با محیط توسعه IDE) NetBeans) ؛ (5)
این تصویر نشان می دهد که دیباگ اجرا شده و در خط 11 که breakpoint وجود داشت، متوقف شده
برای متوقف کردن و پایان کار دیباگ از یکی دو مسیر زیر می رویم:
پلتفرم Java SE با محیط توسعه IDE) NetBeans) ؛ (5)

پلتفرم Java SE با محیط توسعه IDE) NetBeans) ؛ (5)
یکی از ویژگی مهم دیباگ کننده netbeans این است که می تواند، یک خط از کد را اجرا کند. در اینجا روش stepping نقش ایفا می کند.

3- روش سوم : از مسیر روبرو: Debug > Step Into

پلتفرم Java SE با محیط توسعه IDE) NetBeans) ؛ (5)
کلاسهای تابع main اولین جایی است که دیباگ کننده وارد آن می شود. این روش برنامه را از اولین خط تابع main اجرا می کند . شما می توانید به آسانی هر خط از کلاس را بدون داشتن breakpoint دیباگ کنید و بپیمایید.
وقتی به صورت عادی دیباگ می کنیم ، این گزینه را در toolbar هم داریم. (پلتفرم Java SE با محیط توسعه IDE) NetBeans) ؛ (5) )
روش دیگر این است که یک watch روی متغییر قرار دهید.

4- پنجره watch

این پنجره همه ی متغیییر ها و عباراتی که شما هنگام دیباگ کردن مشخص می کنید لیست می کند. به عنوان پیش فرض این پنجره به طور اتوماتیک از جایی که شروع به دیباگ می کنید باز می شود. یا می توانید از مسیر زیر آن را فعال کنید : Debugging > Watches window >
پلتفرم Java SE با محیط توسعه IDE) NetBeans) ؛ (5)
اگر هنگام دیباگ پنجره watchخودش باز شود با به پایان رسیدن دیباگ هم خودش بسته می شود اما اگر دستی این پنجره را باز کنیم تا زمانیکه خودمان آنرا نبندیم باز می ماند.
پلتفرم Java SE با محیط توسعه IDE) NetBeans) ؛ (5)
اطلاعاتی که هر بار عمل watch می گیرد شامل : نام متغییر و عبارت (expression ) ، نوع و مقدار است. اگر متغییر در سمت چپ خود یک کنترل داشت ، آنرا کلیک می کنیم تا آنرا توضیح دهد. اگر نوع شی را به صورت زیر خط دار و آبی نمایش داد، با کلیک کردن آن به آن شی در سورس کد می پرد. شما می توانید سلول value را کلیک کنید و مستقیما مقدار را تغییر دهید.
وقتی که مقدار جدیدی به watch اضافه کنید، ارزش متغییر سریع تغییر می کندو نشان داده می شود. مقدار یک watch به متن جاری بستگی دارد.هنگامیکه شما از میان کد برنامه حرکت می کنید پنجره watch به روز رسانی می شود.در بعضی موارد، دیباگ کننده علامت پوند(#) و یک شماره را به عنوان مقدار متغییر اختصاص می دهد. این شماره یک معرف یکتا نمونه معیین است . اگریک نمونه مشابه یا متفاوت نشان دهد شما می توانید این معرف را برای تعیین کردن استفاده کنید. شما نمی توانید این مقداررا تغییر دهید.
جدول زیر ایکون هایی که در سمت چپ نام اشیا نشان داده می شود را توصیف می کند:
پلتفرم Java SE با محیط توسعه IDE) NetBeans) ؛ (5)
اکنون برای مثال زیر (Example.java) یک watch ساده اصافه می کنیم:
کد های زیر را در ادیتور خود وارد کنید:
پلتفرم Java SE با محیط توسعه IDE) NetBeans) ؛ (5)
1- متغییر یا عبارت مورد نظر را در سورس برنامه انتخاب کرده ( در مثال زیر a ) و روی آن راست کلیک کرده و گزینه ی
New Watch را انتخاب می کنیم (ctrl+shift+f7) و یک dialog box جدید باز می شود که مقداری در text fild آن وجود دارد
2- Ok می کنیم.
پلتفرم Java SE با محیط توسعه IDE) NetBeans) ؛ (5)

پلتفرم Java SE با محیط توسعه IDE) NetBeans) ؛ (5)
پنجره ی whatch لیستی از watch های جاری و نوع و مقدارشان را نشان می دهد:
پلتفرم Java SE با محیط توسعه IDE) NetBeans) ؛ (5)

اگر پنجره watch فعال نباشد از مسیر زیر آنرا فعال می کنیم:
پلتفرم Java SE با محیط توسعه IDE) NetBeans) ؛ (5)
Variable window :
این پنجره نام ، نوع و مقدار همه ی مقادیر در محدوده جاری و همچنین متغییر های استاتیک از بقیه را نشان می دهد.
برای فعال کردن این پنجره از مسیر روبرو: windows > Debugging > Variables
دیباگ کننده به شما اجازه می دهد که مقادیر متغییر ها را در این پنجره تغییر دهید و اجرا برنامه را با استفاده از مقادیر جدید ادامه دهید.
پلتفرم Java SE با محیط توسعه IDE) NetBeans) ؛ (5)
اکنون با ذکر مثالی مطالب گفته شده را مرور می کنیم
کلاسی به نام (person.java) ایجاد می کنیم و کد های سیر را در آن وارد می کنیم.
یک watch ساده اصافه می کنیم و پنجره ی variables را بررسی می کنیم:
1- در کلاس person.java متغییر personal را انتخاب می کنیم.
2- دو روش برای افزودن watch وجود دارد یکی با نوار بالا و مسیر Debug> new watch یا با فشردن (ctrl+shift+f7) ، بعد ok می کنیم و personal به variable view اضافه می شود.
پلتفرم Java SE با محیط توسعه IDE) NetBeans) ؛ (5)
اولین breakpoint را دقیقا در خطی که در زیر نشان داده شده ایجاد می کنیم :
person2.setName(null);
پلتفرم Java SE با محیط توسعه IDE) NetBeans) ؛ (5)
حالا می خواهیم یک breakpoint دیگری در همان کلاس person.java در خط زیر اضافه کنیم
this.age = age;
پلتفرم Java SE با محیط توسعه IDE) NetBeans) ؛ (5)
در پایان کلاس Main.java را باز می کنیم و (Control+Shift+F5) را می زنیم و برنامه را دیباگ می کنیم
به محض اینکه دیباگ شروع شود اجرا در اولین breakpoint متوقف می شود.
Break point به IDE می گوید که موقتا برنامه را متوقف کندو به توسعه دهنده (برنامه نویس) اجازه دهد تا مقادیر متغییرها و watch را در آن نقطه آزمایش کند.
پلتفرم Java SE با محیط توسعه IDE) NetBeans) ؛ (5)
همانطور که در بالا نشان می دهد، watch را با الماس آبی وهمچنین متغییر های نرمال را با لوزی سبز نشان می دهد. این امکان در زمان اجرا وجود دارد که برای چک کردن محتویات اشیا watch و متغییر ها را توسعه دهیم.
نقطه اجرا با رنگ سبز هایلایت شده. برای پرش به خطی از کد F8 را می زنیم. برای ادامه F5 را می زنیم. IDE عملیات دیباگ را تا پیدا کردن breakpoint دیگر ادامه می دهد، در نقطه ای که اجرا متوقف می شود، توسعه دهنده (برنامه نویس) شانس دیگری برای آزمودن اجرا دارد.
در مثال ما اجرا تا تابع person2.setAge ادامه پیدا می کند. اگرbreakpoint دیگری نداشته باشیم اجرای برنامه تا اخر ادامه پیدا می کند.
breakpoint شرطی
می توانیم breakpoint شرطی ایجاد کنیم،
> properties > Breakpoint < کلیک راس روی breakpoint
پلتفرم Java SE با محیط توسعه IDE) NetBeans) ؛ (5)
پنجره ای باز می شود که در آن شروط را اختصاص می دهیم. که این مبحث را همین جا تمام می کنیم و وارد جزئیات بیشتر نمی شویم.



 

 



مقالات مرتبط
نظرات کاربران
ارسال نظر
با تشکر، نظر شما پس از بررسی و تایید در سایت قرار خواهد گرفت.
متاسفانه در برقراری ارتباط خطایی رخ داده. لطفاً دوباره تلاش کنید.
مقالات مرتبط
موارد بیشتر برای شما