سلام به همه اعضای انجمن CodeGym! امروز بیایید در مورد اشکال زدایی صحبت کنیم - این چیست و چگونه در IntelliJ IDEA اشکال زدایی کنیم. این مقاله برای افرادی در نظر گرفته شده است که قبلاً حداقل دانشی از Java Core دارند. هیچ چارچوب یا روش پیچیده ای برای انتشار کتابخانه ها وجود نخواهد داشت. یک قدم زدن آرام پس خودتان را راحت کنید و بیایید شروع کنیم!
را انتخاب کرده و OK را فشار دهید . سپس پنجره زیر را مشاهده خواهید کرد: گزینه های انتخاب شده را رها کنید: وارد کردن پروژه از منابع خارجی و Maven . روی Finish کلیک کنید . اکنون که پروژه را وارد کردیم، میتوانیم بقیه مراحل را با یک مثال زنده توصیف کنیم.
نماد را در بخش Debug پیدا کنید. این همه نقاط شکست را بی صدا می کند. برای اینکه ببینید چه نقاط شکستی تنظیم شدهاند، میتوانید به بخش Debug در گوشه سمت چپ پایین بروید و نماد را پیدا کنید
، یا Ctrl+Shift+F8 را فشار دهید :
با رفتن به لیست نقاط شکست، موارد زیر را مشاهده خواهیم کرد:
دو نقطه شکست وجود دارد . اینجا:
در پنجره ای که ظاهر می شود، نام استثنایی را که می خواهید اضافه کنید بنویسید، از لیست انتخاب کنید و روی OK کلیک
کنید . کمی تمرین خواهم کرد
مستندات فایل README که در دایرکتوری ریشه پروژه یافت می شود، رفتار مورد انتظار همه گل هایی که از آنها شهد جمع آوری می شود این است که مقدار عسل جمع آوری شده (که به شکل دو برابر است ) برابر با نصف باشد. شهد جمع آوری شده این پروژه دارای کلاس های زیر است:
باید بررسی کنیم و مشخص کنیم که مشکل چیست. از پشته ردیابی در گوشه سمت راست پایین، میتوانیم ببینیم که در RuntimeException به این موارد پرتاب شده است
این دقیقاً همان چیزی است که در بالا در مورد آن صحبت کردیم. بیایید با اجرای این
در نتیجه، درست قبل از پرتاب کردن استثنا، برنامه را متوقف خواهیم کرد و این نماد را خواهیم دید: ![اشکال زدایی در IntelliJ IDEA: راهنمای مبتدی - 17]()
برای دریافت تمام اطلاعات موجود، باید به بخش Debug نگاه کنیم. دارای یک صفحه متغیرها است که تمام متغیرهای موجود در این بخش از برنامه را نشان می دهد:
برنامه تا پایان اجرا می شود و پاسخ زیر را می دهد:
مستندات فایل README، شهد به نسبت 2 به 1 به عسل تبدیل می شود:
ما این نقطه را با جزئیات بیشتری در نظر خواهیم گرفت. اجرای برنامه قبل از اجرای خط 28 متوقف شد. در قسمت پایین، قسمت Debug را مشاهده می کنیم که تمام اطلاعات موجود در مورد برنامه در حال اجرا را نشان می دهد. همانطور که قبلا ذکر شد، پنجره Variables شامل تمام متغیرها و اشیاء موجود در این بخش از برنامه است. صفحه Frames مراحلی را که برنامه طی میکند نشان میدهد — میتوانید به مراحل قبلی (فریمها) نگاه کنید و تمام دادههای محلی را ببینید. برای ادامه اجرای برنامه می توانید F9 یا آیکون سبز رنگ را مانند تصویر زیر فشار دهید:
برای توقف برنامه، روی مربع قرمز کلیک کنید:
برای راه اندازی مجدد برنامه در حالت اشکال زدایی، روی فلش کلیک کنید:
در ادامه، می توانید از طریق مسیر ادامه دهید. برنامه گام به گام با استفاده از دو کلید:
استفاده می کنیم و آنچه در آن اتفاق می افتد را شرح می دهیم:
مستندات حاوی خطا است و باید به روز شود. بیایید فایل README را به روز کنیم:
Stack Overflow CodeGym بخوانیم :)

چرا به حالت Debug نیاز دارید
بیایید فوراً چیزی را برای خودمان روشن کنیم: هیچ کدی بدون اشکال وجود ندارد... زندگی اینگونه است. بنابراین، اگر کد ما آنطور که انتظار داشتیم کار نکرد، نباید تکه تکه شویم و تسلیم شویم. اما چه باید بکنیم؟ خوب، ما میتوانیمSystem.out.println
دستورات را در همه جا قرار دهیم و سپس خروجی کنسول را به امید یافتن خطا بررسی کنیم. گفته می شود، شما می توانید (و مردم این کار را انجام می دهند) با استفاده از ثبت دقیق، اشکال زدایی کنید. اما اگر می توانید کد خود را روی یک ماشین محلی اجرا کنید، بهتر است از حالت Debug استفاده کنید . می خواهم فوراً یادآوری کنم که در این مقاله ما اشکال زدایی یک پروژه را با استفاده از IntelliJ IDEA در نظر خواهیم گرفت.
حالت Debug چیست؟
حالت Debug برای اشکال زدایی (بررسی) کدهای در حال اجرا است. این امکان را برای شما فراهم می کند که اعدام را در مکان های تعیین شده متوقف کنید و به نحوه پیشرفت کارها نگاه کنید. این به شما امکان می دهد وضعیت برنامه را در یک مکان خاص در کد درک کنید. درست مثل این است که بتوانید ساعت را متوقف کنید و از کنار به همه چیز نگاه کنید. باحال، درسته؟ هدف ما یادگیری سریع و آسان نحوه اشکال زدایی برنامه ها با استفاده از محیط توسعه دوست داشتنی IntelliJ IDEA است.آنچه برای شروع اشکال زدایی نیاز دارید
در اینجا چند توصیه رایگان وجود دارد: در حین خواندن این مقاله، تمام کارهایی را که در اینجا توضیح داده خواهد شد انجام دهید - شما همه چیزهایی را که باید انجام دهید، دارید. آنچه شما نیاز دارید:- IntelliJ IDEA نسخه 2019.3.1 یا بالاتر. اگر کسی این را ندارد، در اینجا پیوندی وجود دارد که می توانید آن را دانلود کنید . نسخه انجمن را دانلود کنید — این نسخه ای است که من از آن استفاده خواهم کرد.
- این پروژه GitHub را کلون کنید و آن را از طریق IDEA وارد کنید.


فقط یه ذره تئوری... قول میدم :D
برای شروع حتی کمی اشکال زدایی، باید بفهمید که نقطه شکست چیست و با چند کلید داغ آشنا باشید. نقطه انفصال یک نشانگر ویژه است که نشان می دهد که در آن می خواهید اجرای برنامه متوقف شود، احتمالاً بر اساس وضعیت برنامه. میتوانید با کلیک چپ بر روی پانل سمت چپ یا با کلیک کردن روی محل کد و فشار دادن Ctrl+F8 ، یک نقطه شکست تعیین کنید . بیایید به سه نوع نقطه شکست نگاه کنیم: نقاط شکست خط، نقاط نظارت میدانی، و نقاط شکست روش. اینطور به نظر می رسد:-
روی یک خط:
اگر دستوری دارای عبارت لامبدا باشد، IDEA از شما میخواهد که نقطه شکست را روی کل عبارت قرار دهید یا به طور خاص روی عبارت لامبدا:
-
در یک روش:
-
در یک کلاس:




- Bee.java:24 — در کلاس Bee در خط 24
- Main.java:14 — در کلاس Main در خط 14


بیایید این کاری را انجام دهیم که به آن اشکال زدایی می گویند!
من از صف طولانی زنبورداران خانوادگی هستم، بنابراین پروژه ای که برای نشان دادن اشکال زدایی ایجاد کردم، فرآیند جمع آوری شهد، تبدیل شهد به عسل و سپس گرفتن عسل از کندو را توصیف می کند. با توجه به- زنبور عسل - یک زنبور کارگر معمولی
- BeeQueen - ملکه زنبور عسل
- BeeHive - کندوی زنبور عسل
- گیاه عسل - گیاه عسل (منبع شهد) که از آن شهد جمع آوری می شود
- اصلی - این جایی است که ما
public static void main()
روشی را پیدا می کنیم که در آن اجرا شروع می شود.
main()
، متوجه می شویم که برنامه ما نه تنها مقدار عسل را محاسبه نمی کند، بلکه یک استثنا نیز می اندازد... 
HoneyPlant.java:20
: 
main()
روش در حالت اشکال زدایی، به دنبال این RuntimeException باشیم. برای این کار روی فلش مثلث سبز رنگ در IntelliJ IDEA کنار روش کلیک کنید main()
. 


- شهد = 1.0;
- ظرفیت شهد = -1.0.
if (nectar == 0) {
return 0;
}
اما مشکل اینجاست که ما متغیر اشتباهی را بررسی می کنیم. این یک خطا در کد است. این برنامه به جای بررسی مقدار شهد موجود در گل (که در متغیر nectarCapacity ذخیره می شود)، مقدار پارامتر شهد روش را بررسی می کند که مقدار شهدی است که می خواهیم از گل بگیریم. ایناهاش! اولین باگ ما! پس از رفع این مشکل، کد زیر را دریافت می کنیم:
if (nectarCapacity == 0) {
return 0;
}
حالا main()
روش را به صورت عادی اجرا کنید (Run 'Main.main()')
. هیچ استثنایی وجود ندارد و برنامه کار می کند: 
"33.0 honey was produced by 7 bees from 2 honey plants"
اکنون همه چیز خوب است، اما این پاسخ نادرست است... طبق ## Documentation
Presentation based on honey production.
**Note**: 2 units of nectar = 1 unit of honey
روش اصلی به وضوح دارای دو گیاه عسل با 30 و 40 واحد شهد است. بنابراین در نهایت باید 35 واحد عسل داشته باشیم. اما برنامه به ما می گوید که 33 می گیریم. دو واحد دیگر کجا رفتند؟ بیایید دریابیم! برای انجام این کار، یک نقطه شکست در Main.main()
متد در خط 28 تنظیم کنید، جایی که beeHive.populateHoney()
فراخوانی شده است و main()
متد را در حالت Debug اجرا کنید: 



- F8 - بدون وارد شدن به متدها، کد را طی کنید.
- F7 - کد را طی کنید و وارد روش ها شوید.
beeHive.populateHoney()
روش شویم. با قدم گذاشتن در آن، دریافتیم: اکنون از F8 برای گذر از این روش 
- خط 25 - Stream API برای جمع آوری شهد از همه زنبورها استفاده می شود
- خط 26 - عسل تازه ایجاد شده به عسل موجود اضافه می شود.
- خط 27 - 2 واحد عسل برای ملکه اختصاص داده شده است
- خط 28 - این دو واحد از کل مقدار عسل حذف می شود
- خط 29 - ملکه این عسل را می خورد.
## Documentation
Presentation based on honey production.
**Note**:
* 2 units of nectar = 1 unit of honey
* The queen bee eats 2 units of honey every time when beehive is replenished with honey.
انجام شد. ما تمام اشکالاتی را که پیدا کردیم برطرف کرده ایم. ما میتوانیم با آرامش به نگاه خود راضی ادامه دهیم، قهوه بنوشیم و مقالاتی در بیایید خلاصه کنیم
در این مقاله یاد گرفتیم:- کار همه دارای خطاهایی است و اشکال زدایی یک راه عالی برای رفع آنهاست
- نقطه انفصال چیست و چه نوع نقاط شکستی وجود دارد
- نحوه تنظیم نقطه شکست استثنا
- نحوه عبور از کد در حالت اشکال زدایی
GO TO FULL VERSION