טריקים לאיתור באגים של IntelliJ

1. סקירה כללית

במדריך זה נבדוק כמה מהם מתקני איתור באגים של IntelliJ מתקדמים.

ההנחה היא כי יסודות הבאגים כבר ידועים (כיצד להתחיל באגים, להיכנס אל, לדרוך מעל פעולות וכו '). אם לא, עיין במאמר זה לקבלת פרטים נוספים על כך.

2. צעד חכם פנימה

ישנם מצבים בהם מתקשרות למספר שיטות בשורה אחת של קוד מקור, כגון doJob (getArg1 (), getArg2 ()). אם נתקשר להיכנס אל פעולה (F7), הבאגים נכנס לשיטות לפי הסדר המשמש את JVM להערכה: getArg1getArg2doJob.

למרות זאת, אולי נרצה לדלג על כל קריאות הביניים ולהמשיך לשיטת היעד ישירות. צעד חכם פנימה פעולה מאפשרת לעשות זאת.

שֶׁלָה קשור ל Shift + F7 כברירת מחדל ונראה ככה כשהוא מופעל:

כעת אנו יכולים לבחור את שיטת היעד להמשיך. כמו כן, שים לב כי IntelliJ תמיד שם את השיטה החיצונית בראש הרשימה. זה אומר שנוכל ללכת אליו במהירות על ידי לחיצה Shift + F7 | להיכנס.

3. מסגרת טיפה

אנו עשויים להבין כי עיבוד כלשהו שאנו מעוניינים בו כבר קרה (למשל חישוב טיעון השיטה הנוכחי). במקרה הזה, אפשר להוריד את מסגרות המחסניות הנוכחיות של JVM על מנת לעבד אותן מחדש.

שקול את המצב הבא:

נניח שאנחנו מעוניינים באיתור באגים getArg1 עיבוד, אז אנו מורידים את המסגרת הנוכחית (doJob שיטה):

עַכשָׁיו אנחנו בשיטה הקודמת:

עם זאת, טיעוני השיחה כבר מחושבים בשלב זה, אז, אנחנו צריכים להוריד גם את המסגרת הנוכחית:

כעת אנו יכולים להריץ מחדש את העיבוד על ידי התקשרות להיכנס אל.

4. נקודות עצירה בשטח

לפעמים שדות שאינם פרטיים משתנים על ידי מחלקות אחרות, לא באמצעות מגדירים אלא באופן ישיר (זה המקרה בספריות צד ג 'בהן איננו שולטים בקוד המקור).

במצבים כאלה, קשה להבין מתי נעשה את השינוי. IntelliJ מאפשרת ליצור נקודות עצירה ברמת השדה כדי לעקוב אחר זה.

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

5. רישום נקודות עצירה

לפעמים אנו יודעים שיש מצב גזע ביישום אך לא יודעים איפה זה בדיוק. זה עשוי להיות אתגר לסמר אותו, במיוחד בזמן עבודה עם קוד חדש.

אנו יכולים להוסיף הצהרות ניפוי באגים למקורות התוכנית שלנו. עם זאת, אין יכולת כזו עבור ספריות צד שלישי.

ה- IDE יכול לעזור כאן - זה מאפשר קביעת נקודות שבירה שאינן חוסמות ביצוע פעם אחת, אלא מייצרות הצהרות רישום במקום.

שקול את הדוגמה הבאה:

ריק סטטי ציבורי ראשי (String [] args) {ThreadLocalRandom random = ThreadLocalRandom.current (); ספירת int = 0; עבור (int i = 0; i <5; i ++) {if (isInterested (random.nextInt (10))) {count ++; }} System.out.printf ("נמצא% d ערכי עניין% n", ספירה); } בוליאני סטטי פרטי isInterested (int i) {return i% 2 == 0; }

נניח שאנחנו מעוניינים להיכנס בפועל מעוניין הפרמטרים של השיחה.

בואו ליצור נקודת שבירה לא חוסמת בשיטת היעד (מִשׁמֶרֶת + לחיצה שמאלית על מרזב העורך השמאלי). לאחר מכן בואו נפתח את המאפיינים שלו (לחץ לחיצה ימנית על נקודת השבר) ו- הגדר את ביטוי היעד שיירשם:

בעת הפעלת היישום (שים לב שעדיין יש צורך להשתמש במצב ניפוי באגים), נראה את הפלט:

isInterested (1) isInterested (4) isInterested (3) isInterested (1) isInterested (6) נמצאו 2 ערכים מעניינים

6. נקודות עצירה מותנות

יכול להיות שיש לנו מצב בו מתקשרת שיטה מסוימת ממספר שרשורים בו זמנית ועלינו לפתור באגים בעיבוד רק לצורך טיעון מסוים.

IntelliJ מאפשר יצירת נקודות עצירה המשהות את הביצוע רק אם מתקיים תנאי מוגדר על ידי המשתמש.

הנה דוגמה המשתמשת בקוד המקור לעיל:

כעת הבאגים יפסיק בנקודת השבירה רק אם הטיעון הנתון גדול מ -3.

7. סימני אובייקט

זו התכונה החזקה ביותר והפחות מוכרת של IntelliJ. זה די פשוט במהותו - אנו יכולים לצרף תוויות מותאמות אישית לאובייקטים של JVM.

בואו נסתכל על אפליקציה בה נשתמש להדגמתם:

מבחן מחלקה ציבורית {public static void main (String [] args) {משימות אוסף = Arrays.asList (משימה חדשה (), משימה חדשה ()); taken.forEach (משימה -> אשכול חדש (משימה) .התחל ()); } ריק סטטי פרטי mayBeAdd (בעל אוסף) {int i = ThreadLocalRandom.current (). nextInt (10); אם (i% 3 == 0) {holder.add (i); }} מחלקה סטטית פרטית מיישמת משימה Runnable {מחזיק אוסף סופי פרטי = ArrayList חדש (); @ עקוף ריצה בטלנית ציבורית () {עבור (int i = 0; i <20; i ++) {mayBeAdd (מחזיק); }}}}

7.1. יצירת סימנים

ניתן לסמן אובייקט כאשר יישום נעצר בנקודת הפסקה והיעד נגיש ממסגרות מחסנית.

בחר אותו, לחץ F11 (סמן אובייקט והגדר את שם היעד:

7.2. צפו בסימנים

כעת אנו יכולים לראות את תוויות האובייקטים המותאמות אישית שלנו גם בחלקים אחרים של היישום:

הדבר המגניב הוא זה גם אם לא ניתן להגיע לאובייקט מסומן כרגע ממסגרות ערימה, אנו עדיין יכולים לראות את מצבו - פתח הערך ביטוי שיח או הוסף שעון חדש והתחל להקליד את שם הסימן.

IntelliJ מציעה להשלים את זה עם _ תווית תווית סִיוֹמֶת:

כשאנחנו מעריכים את זה, מצב אובייקט היעד מוצג:

7.3. מסמן כתנאים

אפשר גם להשתמש בסימנים בתנאי נקודת הפסקה:

8. מסקנה

בדקנו מספר טכניקות שמגדילות הרבה את הפרודוקטיביות תוך ניפוי באגים באפליקציה מרובת השחלות.

זו בדרך כלל משימה מאתגרת, ואנחנו לא יכולים להמעיט בחשיבות העזרה של כלים כאן.


$config[zx-auto] not found$config[zx-overlay] not found