שלום לכולם, קהילת JavaRush. היום נדבר על איתור באגים: מה זה ואיך לבצע איתור באגים ב- Intellij IDEA. המאמר מיועד לאנשים שכבר יש להם ידע מינימלי ב-Java Core. לא יהיו מסגרות או תהליכים מורכבים להוצאת ספריות. הליכה קלה. אז תרגישי בנוח ובואו נתחיל!
התיעוד של קובץ README, שנמצא בשורש הפרויקט, אנו קוראים: התנהגות צפויה - מכל הפרחים מהם נאסף צוף (כערך כפול ) , תיאסף כמות דבש השווה למחצית. הצוף שנאסף. בפרויקט יש את הכיתות הבאות:
שבתיק ה- README התיעוד כתוב שהצוף הופך לדבש ביחס של 2 ל-1:
התיעוד README מכיל שגיאה ויש לעדכן אותו. בואו נעדכן את קובץ README:
JavaRush במראה חכם :)
למה אתה צריך Debug?
בואו נבהיר מיד: אין קוד בלי באגים... ככה החיים עובדים. לכן, אל לנו מיד להיות רפוי ולוותר על הכל אם הקוד לא עובד כפי שציפינו. אבל מה לעשות? כמובן, אתה יכול להגדיר אותוSystem.out.println
בכל מקום שאתה יכול ואז למיין את הפלט בטרמינל בתקווה שתצליח למצוא שגיאה. ובכל זאת, זה אפשרי... והם עושים את זה, והם עושים את זה בזהירות באמצעות רישום (תוכלו לקרוא על זה כאן ). אבל אם אפשר להריץ את הקוד על המחשב המקומי, עדיף להשתמש ב-Debug . ברצוני לציין מיד שבמאמר זה נשקול ניפוי באגים בפרויקט בתוך Intellij IDEA. אם אתה מעוניין לקרוא על איתור באגים מרחוק, הנה מאמר מהמשאב שלנו .
מה זה Debug
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 - מלכת דבורים;
- כוורת - כוורת;
- HoneyPlant - צמח דבש ממנו אוספים דבש;
- ראשי - היכן
public static void main()
נמצאת השיטה בה מתחיל הפרויקט.
main()
, מסתבר שלא רק שכמות הדבש לא סופרת, אלא גם מופיעה שגיאה... צריך להסתכל מה לא בסדר שם. מ-Stack Trace בפינה הימנית התחתונה, אנו יכולים לראות שב- HoneyPlant.java:20
, נזרק RuntimeException: זה בדיוק המקרה שלנו: יש RuntimeException, בואו נוסיף חיפוש אחר חריג כזה, כפי שתואר לעיל, ונפעיל main()
את השיטה ב- מצב ניפוי באגים. לשם כך, לחץ על החץ המשולש הירוק ב- Intellij IDEA לפני השיטה main()
: ונקבל את התוכנית שנעצרה ברגע לפני הפעלת החריגה עם הסמל הזה . כדי לקבל מידע מלא, עליך להסתכל בסעיף Debug. יש לו משתנים , המציגים את כל המשתנים הזמינים בחלק זה של האפליקציה:
- צוף = 1.0;
- nectarCapacity = -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, המתאר את כל המידע על האפליקציה הפועלת. החלק המשתנים, כפי שכבר הוזכר, מכיל את כל המשתנים והאובייקטים הנגישים מחלק זה של האפליקציה. החלק של 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 ו-Debug: לא צלילה, אלא שנורקלינג
- האמת המרה על תכנות...
- תיעוד רשמי
- סוגי נקודות שבירה. תיעוד רשמי
GO TO FULL VERSION