ניפוי באגים ביישומי אביב

1. הקדמה

ניפוי באגים הוא אחד הכלים החשובים ביותר לכתיבת תוכנה.

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

נראה גם כיצד Spring Boot, שרתי יישומים מסורתיים ו- IDE מפשטים זאת.

2. Java Debug Args

ראשית, בואו נסתכל על מה שג'אווה נותנת לנו מהקופסה.

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

לָכֵן, ניפוי באגים צריך להתבצע רק במהלך הפיתוח ולעולם לא במערכות ייצור.

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

-agentlib: jdwp = transport = dt_socket, שרת = y, השעה = n, כתובת = 8000

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

-agentlib: jdwp

אפשר את סוכן Java Debug Wire Protocol (JDWP) בתוך ה- JVM. זהו הטיעון הראשי של שורת הפקודה המאפשר איתור באגים.

הובלה = dt_socket

השתמש בשקע רשת לחיבורי ניפוי באגים. אפשרויות אחרות כוללות שקעי Unix וזיכרון משותף.

שרת = y

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

להשעות = n

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

כתובת = 8000

יציאת הרשת שה- JVM יקשיב לחיבורי ניפוי באגים.

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

3. יישומי אתחול האביב

ניתן להפעיל יישומי Spring Boot בכמה דרכים. הדרך הפשוטה ביותר היא משורת הפקודה באמצעות ג'אווה פקודה עם -קַנקַן אוֹפְּצִיָה.

כדי לאפשר ניפוי באגים, פשוט נוסיף את טיעון הבאגים באמצעות אוֹפְּצִיָה:

java -jar myapp.jar -Dagentlib: jdwp = transport = dt_socket, שרת = y, השעה = n, כתובת = 8000

עם Maven, אנו יכולים להשתמש בתנאי לָרוּץ המטרה להתחיל את היישום שלנו עם ניפוי באגים:

קפיץ אתחול mvn: הפעל -Dagentlib: jdwp = transport = dt_socket, שרת = y, השעה = n, כתובת = 8000

כמו כן, עם Gradle, אנו יכולים להשתמש ב- bootRun מְשִׁימָה. ראשית, עלינו לעדכן את build.gradle קובץ כדי להבטיח ש- Gradle מעביר טיעונים לשורת הפקודה ל- JVM:

bootRun {systemProperties = System.properties}

עכשיו אנחנו יכולים לבצע את bootRun מְשִׁימָה:

דרגה bootRun -Dagentlib: jdwp = תחבורה = dt_socket, שרת = y, השעה = n, כתובת = 8000

4. שרתי יישומים

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

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

4.1. טומקט

סקריפט ההפעלה של Tomcat נקרא catalina.sh (קטלינה.בת ב- Windows). כדי להפעיל שרת Tomcat עם ניפוי באגים אנו יכולים לתמוך jpda לטיעונים:

catalina.sh jpda להתחיל

בארגומנטים של ניפוי באגים ברירת המחדל ישתמשו בשקע רשת בהאזנה ביציאה 8000 עם להשעות = n. ניתן לשנות את אלה על ידי הגדרת אחד או יותר ממשתני הסביבה הבאים: JPDA_TRANSPORT , JPDA_ADDRESS, ו JPDA_SUSPEND.

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

4.2. Wildfly

סקריפט ההפעלה של Wildfly הוא stand-one.sh. כדי להפעיל שרת Wildfly עם אפשרות איתור באגים נוכל להוסיף -לנפות.

מצב ברירת המחדל לניפוי באגים משתמש במאזין רשת ביציאה 8787 עם להשעות = n. אנחנו יכולים לעקוף את היציאה על ידי ציון זה אחרי ה- -לנפות טַעֲנָה.

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

4.3. Weblogic

סקריפט ההפעלה של Weblogic הוא startWeblogic.sh. להפעלת שרת Weblogic עם ניפוי באגים אנו יכולים להגדיר את משתנה הסביבה debugFlag ל נָכוֹן.

מצב ברירת המחדל לניפוי באגים משתמש במאזין רשת ביציאה 8453 עם להשעות = n. אנו יכולים לעקוף את היציאה על ידי הגדרת ה- DEBUG_PORT משתנה הסביבה.

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

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

4.4. דג זכוכית

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

תחום התחלה asadmin - debug

במצב ניפוי באגים המוגדר כברירת מחדל משתמש במאזין רשת ביציאה 9009 עם להשעות = n.

4.5. מֵזַח

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

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

5. ניפוי באגים מ- IDE

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

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

5.1. IntelliJ

IntelliJ מציעה תמיכה מהשורה הראשונה עבור יישומי Spring and Spring Boot. איתור באגים פשוט כמו ניווט לכיתה עם ה- רָאשִׁי שיטה, לחיצה ימנית על סמל המשולש ובחירת ניפוי באגים.

אם פרויקט מכיל מספר יישומי Spring Boot, IntelliJ תספק חלון כלי הפעלת לוח המחוונים. חלון זה מאפשר לנו לנקות באגים מספר יישומי Spring Boot ממקום אחד:

עבור יישומים המשתמשים ב- Tomcat או בשרתי אינטרנט אחרים, אנו יכולים ליצור תצורה מותאמת אישית לצורך איתור באגים. תַחַת לָרוּץ >ערוך תצורות, ישנם מספר תבניות לשרתי היישומים הפופולריים ביותר:

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

על הפעל / הפוך איתור באגים בתצורות מסך, מְרוּחָק תבנית תאפשר לנו להגדיר כיצד לצרף ליישום שכבר פועל:

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

5.2. ליקוי חמה

הדרך המהירה ביותר לבצע ניפוי באגים באפליקציית Spring Boot באקליפס היא ללחוץ לחיצה ימנית על השיטה העיקרית מבין חבילת סייר אוֹ מתווה חלונות:

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

בעיקר התוספת מספקת לוח מחוונים לאתחול המאפשר לנו לנהל מספר יישומי Spring Boot ממקום אחד:

התוספת מספקת גם מגף אביב תצורת הפעלה / איתור באגים המאפשרת התאמה אישית של ניפוי באגים של יישום Spring Boot יחיד. תצוגה מותאמת אישית זו זמינה מכל אותם מקומות כמו התקן יישום Java תְצוּרָה.

כדי לפשל באגים בתהליך שכבר פועל, באופן מקומי או אצל מארח מרוחק, נוכל להשתמש ב- יישום Java מרוחק תְצוּרָה:

6. ניפוי באגים עם Docker

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

ישנן מספר דרכים לחשוף את יציאת הבאגים ב- Docker.

אנחנו יכולים להשתמש -לַחשׂוֹף עם ה לרוץ דוקר פקודה:

הפעלת docker - חשוף 8000 mydockerimage

אנחנו יכולים גם להוסיף את לַחשׂוֹף הנחיה ל קובץ Docker:

חשוף 8000

או אם אנו משתמשים ב- Docker Compose, נוכל להוסיף אותו ל- YAML:

לחשוף: - "8000"

7. מסקנה

במאמר זה ראינו כיצד לאפשר איתור באגים עבור כל יישום Java.

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

ראינו גם כי גם Maven וגם Gradle, כמו גם IDEs הפופולריים ביותר, לכולם תוספות מיוחדות כדי להקל על יישומי האביב וה- Boot Boot.


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