سلام به همه، انجمن JavaRush. امروز در مورد اشکال زدایی صحبت خواهیم کرد: چیست و چگونه در Intellij IDEA اشکال زدایی کنیم. این مقاله برای افرادی در نظر گرفته شده است که قبلاً حداقل دانشی از Java Core دارند. هیچ چارچوب یا فرآیند پیچیده ای برای انتشار کتابخانه ها وجود نخواهد داشت. پیاده روی آسان. پس خودتان را راحت کنید و بیایید شروع کنیم!
مستندات فایل README که در ریشه پروژه نهفته است، می خوانیم: رفتار مورد انتظار - از تمام گل هایی که شهد از آنها جمع آوری می شود (به عنوان مقدار دو برابر )، مقدار عسل معادل نصف آن جمع آوری می شود. شهد جمع آوری شده این پروژه دارای کلاس های زیر است:
مستندات README نوشته شده است که شهد به نسبت 2 به 1 تبدیل به عسل می شود:
مستندات حاوی خطا است و باید به روز شود. بیایید فایل README را به روز کنیم:
هاب JavaRush با نگاهی هوشمندانه ادامه دهیم :)
چرا به Debug نیاز دارید؟
بیایید فوراً آن را روشن کنیم: هیچ کدی بدون اشکال وجود ندارد... زندگی اینگونه عمل می کند. بنابراین، اگر کد آنطور که انتظار داشتیم کار نکرد، نباید فوراً سست شویم و همه چیز را رها کنیم. اما چه باید کرد؟ البته، می توانید آن راSystem.out.println
در هر کجا که می توانید تنظیم کنید و سپس خروجی را در ترمینال مرتب کنید به این امید که بتوانید خطا پیدا کنید. با این حال، ممکن است... و آنها این کار را انجام میدهند، و با استفاده از ورود به سیستم این کار را با دقت انجام میدهند (شما میتوانید در مورد آن اینجا بخوانید ). اما اگر امکان اجرای کد بر روی ماشین محلی وجود دارد، بهتر است از Debug استفاده کنید . می خواهم فوراً متذکر شوم که در این مقاله ما اشکال زدایی یک پروژه را در Intellij IDEA در نظر خواهیم گرفت. اگر علاقه مند به خواندن در مورد اشکال زدایی از راه دور هستید، در اینجا مقاله ای از منبع ما آمده است .
Debug چیست
اشکال زدایی فرآیند اشکال زدایی (بررسی) کد است که در حین اجرای آن می توانید در یک مکان مشخص توقف کرده و پیشرفت اجرا را تماشا کنید. وضعیت برنامه را در یک مکان خاص درک کنید. دقیقاً مثل این است که بتوانید زندگی را متوقف کنید و از بیرون به همه چیز نگاه کنید. باحال، درسته؟ هدف ما یادگیری سریع و آسان نحوه اشکال زدایی برنامه ها با استفاده از محیط توسعه مورد علاقه ما، Intellij IDEA است.آنچه برای شروع اشکال زدایی نیاز دارید
من مشاوره رایگان می دهم: در حالی که مقاله را می خوانید، هر کاری که در اینجا توضیح داده خواهد شد را انجام دهید، خوشبختانه همه چیز برای این کار وجود دارد. چه چیزی نیاز دارید:- محیط توسعه Intellij IDEA نسخه 2019.3.1 و بالاتر. اگر کسی آن را ندارد، اینجا یک لینک است که می توانید آن را دانلود کنید. نسخه انجمن را دانلود کنید زیرا من از آن استفاده خواهم کرد.
- پروژه را از GitHub کلون کنید و آن را از طریق IDEA وارد کنید.
یه تئوری کوچولو... قول میدم :D
برای شروع کمی اشکال زدایی، باید بفهمید breakPoint چیست و چند کلید میانبر که برای شروع به آن نیاز دارید را درک کنید. BreakPoint یک نشانگر ویژه است که مکان یا وضعیتی را که برنامه باید در آن متوقف شود را نشان می دهد. می توانید با کلیک چپ بر روی نوار کناری سمت چپ یا با کلیک بر روی محل کد و فشار دادن Ctrl + F8 یک نقطه شکست تعیین کنید . نقاط شکست در سه نوع وجود دارد: علامت خط، علامت متغیر و علامت روش. به نظر می رسد این است:-
در هر خط:
اگر یک لامبدا در عبارت وجود داشته باشد، IDEA به شما یک انتخاب ارائه می دهد - برای قرار دادن عبارت در کل خط یا به طور خاص در لامبدا:
-
هر روش:
-
در هر کلاس
- Bee.java:24 - در کلاس Bee در خط 24
- Main.java:14 - در کلاس Main در خط 14
بیایید برویم، بیایید به وحشی اشکال زدایی نفوذ کنیم
از آنجایی که من یک زنبوردار ارثی هستم، برای ارائه اشکال زدایی پروژه ای ایجاد کردم که فرآیند جمع آوری شهد توسط زنبورها، تبدیل شهد به عسل و بدست آوردن عسل از کندو را شرح می دهد. بر اساس- زنبور عسل - یک زنبور کارگر معمولی؛
- BeeQueen - ملکه زنبور عسل;
- BeeHive - کندو زنبور عسل;
- گیاه عسل - گیاه عسل که از آن عسل جمع آوری می شود.
- اصلی - جایی که
public static void main()
روشی که پروژه در آن شروع می شود قرار دارد.
main()
، معلوم می شود که نه تنها مقدار عسل حساب نمی شود، بلکه یک خطا نیز ظاهر می شود ... باید ببینید چه چیزی در آنجا اشتباه است. از stack trace در گوشه سمت راست پایین، میتوانیم ببینیم که در HoneyPlant.java:20
RuntimeException پرتاب میشود: این دقیقاً مورد ما است: یک RuntimeException وجود دارد، بیایید یک جستجو برای چنین استثنایی، همانطور که در بالا توضیح داده شد، اضافه کنیم، و main()
روش را در حالت اشکال زدایی. برای این کار قبل از روش main()
: روی فلش مثلث سبز رنگ Intellij IDEA کلیک کنید و در لحظه قبل از فعال شدن استثنا با این آیکون برنامه متوقف شده را دریافت می کنیم.برای دریافت اطلاعات کامل باید به قسمت Debug مراجعه کنید. دارای متغیرهایی است که تمام متغیرهای موجود در این بخش از برنامه را نشان می دهد:
- شهد = 1.0;
- ظرفیت شهد = -1.0.
if ( nectar == 0 ) {
return 0;
}
اما نکته مهم این است که متغیر اشتباه را بررسی می کند ... و این یک اشکال در کد است. برنامه به جای اینکه مقدار شهد گل را که در متغیر nectarCapacity است بررسی کند، مقدار شهد را بررسی می کند که وارد روش می شود و مقداری است که می خواهند از شهد بگیرند. اینجاست، اولین باگ! بنابراین، آن را به درستی بیان می کنیم و عبارت را به دست می آوریم:
if ( nectarCapacity == 0) {
return 0;
}
main()
بعد، روش را در حالت عادی اجرا می کنیم (Run `Main.main()`)
و دیگر خطایی وجود ندارد، برنامه کار کرد: برنامه کار کرد و جواب داد: "33.0 عسل توسط 7 زنبور از 2 گیاه عسل تولید شد" همه چیز خوب است، اما پاسخ این است که اشتباه است ... همه به این دلیل که در فایل ## Documentation
Presentation based on honey getting process.
**Note**: 1 honey point = 2 nectar points
از روش اصلی می توان دریافت که دو گیاه عسل به ترتیب 30 و 40 واحد شهد وجود دارد، بنابراین در نهایت باید 35 واحد عسل بدست آورید. و می نویسد که 33. دو واحد دیگر کجا رفتند؟... حالا متوجه می شویم! برای انجام این کار، باید یک نقطه شکست در متد Main.main()
در خط شماره 28، جایی که اجرا میشود، قرار دهیم beeHive.populateHoney()
و main
متد را در حالت Debug اجرا کنیم: اجازه دهید نگاهی دقیقتر به این نقطه بیندازیم. برنامه قبل از اجرای خط 28 متوقف شد. در پایین بخش Debug را می بینیم که تمام اطلاعات برنامه در حال اجرا را توضیح می دهد. همانطور که قبلا ذکر شد، قسمت Variables شامل تمام متغیرها و اشیایی است که از این قسمت برنامه قابل دسترسی هستند. قسمت Frames مراحلی را که اپلیکیشن طی می کند نشان می دهد، می توانید به مرحله قبل نگاه کنید و تمام داده های محلی را دریافت کنید. برای ادامه کار برنامه می توانید F9 یا نماد سبز رنگ را فشار دهید، مانند شکل زیر: برای توقف برنامه، باید بر روی مربع قرمز کلیک کنید: برای راه اندازی مجدد برنامه در حالت اشکال زدایی، باید روی فلش کلیک کنید: در مرحله بعد، برای رفتن مرحله به مرحله در برنامه، می توانید از دو کلید استفاده کنید:
- F8 - بخشی از کد را مرور کنید و وارد روش های داخلی نشوید.
- F7 - بخشی از کد را مرور کنید و متدهای داخلی را وارد کنید.
beeHive.populateHoney()
، باید F7 را فشار دهیم و به ادامه میپردازیم: در مرحله بعد، با استفاده از این روش از حالت اشکالزدایی با استفاده از F8 تا انتها عبور میکنیم و آنچه در این روش اتفاق میافتد را شرح میدهیم:
- خط 25 - Stream API برای جمع آوری عسل از همه زنبورها استفاده می شود.
- خط 26 - عسل به موجود اضافه می شود.
- خط 27 - 2 واحد عسل برای ملکه اختصاص داده شده است.
- خط 28 - این دو واحد از کل مقدار عسل حذف می شود.
- خط 29 - رحم این عسل را می خورد.
## Documentation
Presentation based on honey getting process.
**Note**:
* 1 honey point = 2 nectar points
* 2 honey point queen bee eats every time when beehive populates the honey.
و تمام: تمام اشکالات یافت شده برطرف شده اند، ما می توانیم با آرامش به نوشیدن قهوه و خواندن مقالات در خلاصه کنید
در این مقاله متوجه شدیم که:- هیچ کاری بدون خطا وجود ندارد و اشکال زدایی یک راه عالی برای حل آنها است.
- نقطه شکست چیست و چه انواعی دارد.
- نحوه پیکربندی نقطه شکست استثنا
- نحوه پیمایش در حالت اشکال زدایی
مقاله برای خواندن
- پروژه مورد استفاده در مقاله
- IntelliJ IDEA and Debug: نه غواصی، بلکه غواصی
- حقیقت تلخ برنامه نویسی...
- اسناد رسمی
- انواع نقاط شکست اسناد رسمی
GO TO FULL VERSION