JavaRush /בלוג Java /Random-HE /IntelliJ IDEA ו-Debug: לא צלילה, אלא שנורקלינג
Viacheslav
רָמָה

IntelliJ IDEA ו-Debug: לא צלילה, אלא שנורקלינג

פורסם בקבוצה
כתיבת קוד היא חצי מהקרב. עדיין צריך לגרום לזה לעבוד כמו שצריך. IDEs וכלי איתור באגים עוזרים לנו מאוד עם זה.
IntelliJ IDEA ו-Debug: לא צלילה, אלא שנורקלינג - 1
באמצעות IntelliJ IDEA כדוגמה, אני מציע להכיר כיצד נוכל לגלות מה קורה לקוד שלנו כשהוא פועל. ניפוי באגים הוא נושא רחב, ולכן סקירה זו אינה מציעה צלילה עמוקה, כמו צוללן. אבל אני מקווה שנורקלינג בוודאות)

מבוא

חלק מכתיבת קוד הוא איתור באגים. ואם המשימות שלך כוללות תמיכה בקוד, יהיה אפילו יותר ניפוי באגים. ובכן, בנוסף, בעזרת איתור באגים, אתה יכול לבחון את עבודת הספריות והמסגרות המשמשות לעומק כפי שאתה יכול לשקוע בג'ונגל של קוד של מישהו אחר. לצלילה שלנו נצטרך: ראשית, פרק את הארכיון שהורדת עם קוד מקור להתחלה מהירה. הפעל את IntelliJ Idea וצור " פרויקט חדש ממקורות קיימים ". בחר את הקובץ pom.xml בספריית המשנה hibernate4 . בעת הייבוא, ציין " ייבא פרויקטים של Maven באופן אוטומטי " והשלם את יצירת הפרויקט, תוך השארת הגדרות אחרות ללא שינוי. בזמן שהפרויקט מיובא, פתח את שרת היישומים של WildFly שהורד לתוך ספרייה כלשהי. אנו מפעילים את השרת באמצעות הקובץ (או standalone.sh עבור מערכות *nix). (!) חשוב להתחיל בפרמטר --debug .אנחנו מחכים שהשרת יתחיל. יכתבו לנו שזה התחיל ב ויציינו את השעה. זה ייראה בערך כך: bin\standalone.bat
IntelliJ IDEA ו-Debug: לא צלילה, אלא שנורקלינג - 2
לאחר מכן, עלינו להפעיל את הפרויקט שבחרנו בשרת. תהליך זה מתואר בתיעוד קטן שניתן למצוא בפרויקט עצמו: \hibernate4\README.adoc כפי שצוין בתיעוד זה, עלינו להפעיל את הפקודה בספריית hibernate4: mvn clean package wildfly:deploy אנו ממתינים להודעה שהבנייה הושלמה בהצלחה:
IntelliJ IDEA ו-Debug: לא צלילה, אלא שנורקלינג - 3
לאחר מכן, ביומן השרת נוכל לראות כיצד "פרוס" הפרויקט החדש:
IntelliJ IDEA ו-Debug: לא צלילה, אלא שנורקלינג - 4
לאחר מכן, נעבור לדף http://localhost:8080/wildfly-hibernate4ואנו אמורים להציג דף עם טופס " הרשמה לחבר ". אז, ההכנה שלנו לניסויים הושלמה ונוכל להתחיל)) יהיו הרבה תמונות קדימה בשביל הבהירות, אז תתכוננו)

ניפוי באגים מרחוק

לכן, עלינו להגדיר את מצב Debug כך שה-IDE שלנו ישלוט בביצוע הקוד בשרת היישומים. IntelliJ Idea מגיע בשתי גרסאות: בחינם (קהילה) ובתשלום (אולטימטיבי). את האחרון ניתן לנסות באופן רשמי בצורה של EAP. בגרסת Ultimate הכל פשוט - ניתן להפעיל את שרת היישומים ישירות מה-IDE במצב ניפוי באגים. אבל בגרסת הקהילה אתה צריך לעשות כמה דברים באופן ידני. לכן, הבה נבחן מקרה מסובך יותר, כלומר. הגדרה בגרסת הקהילה. לגרסת הקהילה יש כמה מגבלות. בפרט, אינך יכול להפעיל ממנו שרת יישומים. אבל אתה יכול להגדיר איתור באגים מרחוק (Remote Debug), כאשר איפשהו בנפרד יש שרת פועל עם האפליקציה שאנחנו צריכים. בואו נשתמש בתיאור ההגדרה מכאן: איתור באגים מרחוק Wildfly במהדורת הקהילה של IntelliJ Idea (הגדרת תצורת הפעלה מרחוק עבור יציאה 8787). לאחר הגדרת התצורה, אנו משיקים את התצורה החדשה שלנו במצב ניפוי באגים:
IntelliJ IDEA ו-Debug: לא צלילה, אלא שנורקלינג - 5
אם הכל בסדר, נראה הודעה על כך למטה:
IntelliJ IDEA ו-Debug: לא צלילה, אלא שנורקלינג - 6

תהליך ניפוי באגים

בוא נעשה ניפוי באגים בשמירת הרשומה. לשם כך, עלינו להחליט תחילה על המקום שבו נחקור. אם לשפוט לפי החלון, אנחנו צריכים כפתור "הרשמה". בוא נמצא את זה בקוד. אז, אנחנו צריכים אלמנט, זה צריך להיות הטקסט: "הירשם". או שיהיה לה משהו לעשות עם זה. לחץ Ctrl+Shift+Fוחפש הרשמה במרכאות. אנו רואים שיש אחד ב-index.xhtml.
IntelliJ IDEA ו-Debug: לא צלילה, אלא שנורקלינג - 7
הקש Enter כדי לעבור למקור שנמצא:
IntelliJ IDEA ו-Debug: לא צלילה, אלא שנורקלינג - 8
אז, אנו רואים שבהרשמה נקרא memberController.register . ככל הנראה, זה חייב להיות סוג של מחלקה Java. לחץ Ctrl+Nוחפש:
IntelliJ IDEA ו-Debug: לא צלילה, אלא שנורקלינג - 9
אכן, יש שיעור כזה. בוא ניכנס לזה. ככל הנראה, צריכה להיות שיטת רישום. לחץ Ctrl+F12וחפש את שיטת הרישום
IntelliJ IDEA ו-Debug: לא צלילה, אלא שנורקלינג - 10
אכן, מצאנו את זה. ככל הנראה, הרישום מתרחש כאן, ב- memberRegistration.register . הקש Ctrl ולחץ על השיטה כדי "ליפול" לתוכה:
IntelliJ IDEA ו-Debug: לא צלילה, אלא שנורקלינג - 11
בואו נגדיר כעת "נקודת שבירה" או נקודת שבירה. זהו סמן שאומר היכן ביצוע הקוד צריך להשהות. ברגע זה תהיה לנו הזדמנות ללמוד הרבה דברים מעניינים. כדי לשים את זה, אתה צריך ללחוץ במקום מימין למספר השורה.
IntelliJ IDEA ו-Debug: לא צלילה, אלא שנורקלינג - 12
בעמוד http://localhost:8080/wildfly-hibernate4 מלא את השדות ולחץ על כפתור הרשמה. סמל הרעיון בלוח יהבהב:
IntelliJ IDEA ו-Debug: לא צלילה, אלא שנורקלינג - 13
במעבר ל-Idea, אתה יכול לראות שיש הרבה מידע מעניין בפאנל ניפוי הבאגים:
IntelliJ IDEA ו-Debug: לא צלילה, אלא שנורקלינג - 14
כאן אתה יכול לראות את הערך של השדות של האובייקט. לדוגמה, ממה מורכב חבר רשום:
IntelliJ IDEA ו-Debug: לא צלילה, אלא שנורקלינג - 15
גדול. מה עוד אנחנו יכולים לעשות? נוכל לפתוח את תפריט ההקשר ולבחור בו Evaluate Expression (או דרך התפריט Run -> Evaluate Expression). טוב יותר, בלוח הבקרה של מאתר הבאגים:
IntelliJ IDEA ו-Debug: לא צלילה, אלא שנורקלינג - 16
זוהי יכולת סופר מגניבה בנקודת עצירה, בעלת גישה לכל מה שיש לנקודת הקוד גישה אליו, להפעיל כל קוד שניתן להפעיל באותה נקודה. לדוגמה:
IntelliJ IDEA ו-Debug: לא צלילה, אלא שנורקלינג - 17
ישנם גם כפתורי בקרה בלוח הבקרה של מאתר הבאגים שאחראים לאן ברצונך להעביר את בקרת זרימת התוכנית. זה לא קסם?) על ידי לחיצה על כפתור F8 (Step Out), אנו עוברים על הקוד מבלי להזין שיטות. על ידי לחיצה על F9, אנו מפסיקים לעבור בין שורות הקוד עם ה-debugger, ונותנים ל-debugger שליטה על ביצוע התוכנית. אם נלחץ על F7 (Step Into), אז נעבור על הקוד, ונכניס כל שיטה שניפגש בדרך. אגב, שימו לב במיוחד לבלוק המידע הזה:
IntelliJ IDEA ו-Debug: לא צלילה, אלא שנורקלינג - 18
זה מראה את השרשור שבו אנחנו נמצאים ואת השיטות על הערימה של השרשור הנוכחי. אבל זה לא הכל. מטעמי נוחות, ניתן לפתוח את לשונית המסגרות. כדי לעשות זאת זה חייב להיות מופעל:
IntelliJ IDEA ו-Debug: לא צלילה, אלא שנורקלינג - 19
כעת בכרטיסיית המסגרות אנו רואים מידע על המעבר משיטה לשיטה, כי התחיל לעבור על הקוד באמצעות Step Into.
IntelliJ IDEA ו-Debug: לא צלילה, אלא שנורקלינג - 20
כפי שאנו רואים, לא תמיד ניתן להעביר אותנו למקום שבו התוכנית מבוצעת כעת. אנחנו נמצאים כעת ב-"getDelegate:469, AbstractEntityManager(org.jboss.as.jpa.container)". אבל למעשה, אנחנו ביישום. עדות לכך היא המחלקה שצוינה בכך:
IntelliJ IDEA ו-Debug: לא צלילה, אלא שנורקלינג - 21
בואו נסתכל על זה. כידוע, הוא מצביע על האובייקט הנוכחי. אנחנו ב-TransactionScopedEntityManager. מדוע אידיאה לא יכולה להראות לנו את הקוד? העובדה היא ש-IntelliJ Idea כרגע לא יודע על שום TransactionScopedEntityManager, מכיוון זה לא קשור לפרויקט שלנו (זה לא נמצא בתלות בפרויקט). כאשר שרת יישומים פועל, פועלות בתוכו הרבה מאוד ספריות שונות. אבל אנחנו יודעים עליהם מעט מאוד, כי... באופן כללי, אנחנו לא צריכים להתעמק בפנים, אנחנו רק צריכים שזה יעבוד. אבל לפעמים עבודה או עניין ספורטיבי דורשים זאת. לאחר מכן, עליך ליידע את Idea על הספרייה הזו כדי שהיא תדע היכן להשיג את קוד הכיתה.

חיבור ספריות של צד שלישי לצורך איתור באגים

ראשית, אנחנו בעצמנו צריכים להבין איזו ספרייה היא שצריכה להיות מחוברת. הדרך הראשונה היא הקשה ביותר - חיפוש באינטרנט. המהירות והתוצאה של מציאת התוצאה תלויות מאוד במידת הניהול של הפרויקט. לדוגמה, ל- WildFly יש מאגר פתוח. אז כשאנחנו בגוגל את "TransactionScopedEntityManager" נלך אל https://github.com/wildfly/wildfly/tree/master/jpa/subsystem ונגלה שאנחנו צריכים wildfly-jpa. השיטה השנייה נכונה. איפה השרת נמצא, תסתכל שם. אמצעים שונים יכולים לעזור בכך. לדוגמה, ב-Windows זה יכול להיות Far Manager . להלן דוגמה לאלגוריתם חיפוש. לאחר התקנתו והשקתו, השתמשו ב-Tab כדי לעבור לאחת הכרטיסיות, באמצעות Alt+F1הכרטיסייה השמאלית או Alt+F2הימנית, ובחרו את המחיצה הדרושה לנו בכונן הקשיח. בהחלט ייתכן שספריית Far Manager עצמה פתוחה ב-Far Manager לאחר ההתקנה. כדי לעבור לשורש הדיסק, הקש Ctrl + \. באמצעות, Alt+Fפתח את חלון החיפוש, התחל להקליד את שם הספרייה והקש Enter לאחר מציאת הספרייה. החיפוש הזה הוא חכם ומדגיש את המדריכים התואמים לטקסט החיפוש. אם תזין תווים שאין להם תיקיות, אז לא ניתן להזין תווים כאלה. בדרך זו אנו עוברים לספריית שרת היישומים. נניח שאיננו יודעים היכן ממוקמים המודולים בשרת. אולי זו הפעם הראשונה בחייך שאתה שומע על סוג של WildFly. לכן, לחץ מייד כאן Alt+F7כדי לחפש קבצים. אז, ההיגיון מכתיב: אנחנו צריכים קובץ עם הספרייה. כלומר, אנחנו צריכים צנצנת. צריכה להיות מחלקה של TransactionScopedEntityManager בפנים. כי class = file, ואז חפש את "contains". כלומר, משהו כזה:
IntelliJ IDEA ו-Debug: לא צלילה, אלא שנורקלינג - 22
עכשיו, בוא נחכה לתוצאה. הוא לא ישאיר אותך לחכות)
IntelliJ IDEA ו-Debug: לא צלילה, אלא שנורקלינג - 23
עכשיו, אנחנו צריכים למצוא את קוד המקור עבורו איפשהו. ויש 2 אפשרויות: בואו נשתמש, אולי, בשני. בוא נמצא שם:
IntelliJ IDEA ו-Debug: לא צלילה, אלא שנורקלינג - 24
כעת נעבור לתיאור התלות. בעמוד זה תוכלו להוריד את קוד המקור. נהדר, עכשיו הורדנו את הקוד. כל מה שנותר הוא לחבר את הספרייה. זה מתחבר בצורה פשוטה ביותר. עלינו לפתוח את הגדרות הפרויקט:
IntelliJ IDEA ו-Debug: לא צלילה, אלא שנורקלינג - 25
שם אנו בוחרים "ספריות" ומוסיפים את קודי המקור שהתקבלו לקטע "מקורות", ובקטע "שיעורים" אנו מציינים את קובץ ה-Library jar עצמו מספריית WildFly, שמצאנו באמצעות Far Manager. לאחר מכן, כאשר אנו מנווט דרך F7, נראה את התוכן של מחלקות AbstractEntityManager ו-TransactionScopedEntityManager, וכן נהיה זמין באמצעות חיפוש לפי מחלקות באמצעות Ctrl+N.

נקודות שבירה עם תנאים

בואו נחזור עכשיו לנקודות השבירה. לפעמים, אנחנו לא תמיד רוצים להפסיק, אלא רק בתנאי מסוים. מה לעשות? וכאן גם ה-IDE שלנו יעזור לנו. על ידי הצבת נקודת שבירה, נוכל להקצות לה תנאי. לדוגמה, שים נקודה ולחץ עליה באמצעות לחצן העכבר הימני:
IntelliJ IDEA и Debug : Не дайвинг, но снорклинг - 26
כעת נקודת השבירה תידלק רק כאשר השם יהיה מקסימיליאן. על ידי לחיצה על הלחצן 'עוד', קבוצה מורחבת של הגדרות עבור נקודות שבירה תהיה זמינה עבורך.

נקודות שבירה על חריגים

לפעמים אנו עשויים לקבל שגיאה ונרצה להתחקות מהיכן היא מגיעה. לאחר מכן נוכל להוסיף נקודת עצירה לא בשורת קוד ספציפית, אלא במקום שבו החריגה תיזרק. כדי לעשות זאת, עליך להרחיב את רשימת כל נקודות השבירה:
IntelliJ IDEA и Debug : Не дайвинг, но снорклинг - 27
וצור כלל חדש עבור סוג החריג שנבחר:
IntelliJ IDEA и Debug : Не дайвинг, но снорклинг - 28
לדוגמה, עבור NPE:
IntelliJ IDEA и Debug : Не дайвинг, но снорклинг - 29

שיעורי HotSwap

ניפוי באגים הוא דבר מדהים. בנוסף לניפוי באגים, זה מאפשר לך לשנות מחלקות! כן, לא ניתן לשנות משאבים (כגון דפי xhtml, למשל) כל כך בקלות. אבל את הקוד של שיעורי Java אפשר להחליף תוך כדי (זה נקרא Hot Swap). כדי לעשות זאת, פשוט שנה את המחלקה עם מאתר הבאגים מצורף והפעל Run -> Reload Changed Classes. סקירה שימושית בנושא זה: 4 דרכים חינמיות להחלפה חמה של קוד ב-JVM

סיכום

Debugger הוא כלי רב עוצמה המאפשר למפתח לחדור לעומקו של הקוד המבצע וללמוד אותו לכל פרט ופרט. זה מאפשר לך לתקן את השגיאות המבלבלות ביותר. זה גם מאפשר לך להבין טוב יותר איך ספריות מסוימות עובדות. אפילו סקירה קצרה כזו התבררה כמרשימה למדי, אבל אני מקווה שהיא תהיה שימושית ומעניינת. אם מישהו מעוניין בחומר זה, אתה יכול להמשיך את הצלילה באמצעות הקישורים הבאים:
IntelliJ IDEA и Debug : Не дайвинг, но снорклинг - 30
#ויאצ'סלב
הערות
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION