פירוק שיעורים בג'אווה

1. הקדמה

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

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

2. פירוק ב- IDE

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

למידע נוסף על ה- IDE שאיתם נעבוד, עיין במאמרים שלנו כיצד לבצע ניפוי באגים ב Eclipse ותצורה של IntelliJ IDEA.

2.1. ליקוי חמה

ראשית, ב- Eclipse אנו זקוקים לתוסף כגון Decompiler Class Enhanced Class (ECD). תוסף זה משתמש בחמישה מפענחים שונים. אנו יכולים להתקין אותו מה- Eclipse Marketplace ואז עלינו להפעיל מחדש את Eclipse.

לאחר מכן, ECD דורש כמות קטנה של הגדרות כדי לשייך קבצי כיתה לצופה מפזר הכיתות:

כמו כן, עלינו לשייך ".מעמד ללא קבצי מקור:

לבסוף, אנו יכולים להשתמש ב- decompiler על ידי לחיצה Ctrl + לחיצה שמאלית על מעמד שֵׁם. אנו רואים את ה- decompiler המשמש בכרטיסיית הקבצים בסוגריים.

בדוגמה זו אנו משתמשים ב- FernFlower:

2.2. רעיון IntelliJ

בניגוד ליקוי החמה IntelliJ IDEA מספק את הפירוק של FernFlower כברירת מחדל.

כדי להשתמש בו, אנחנו פשוט Ctrl + לחיצה שמאלית על שם הכיתה והצג את הקוד:

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

למשל, ה רְכִיב מחזור ההערות מצילום המסך שלעיל כולל את Javadoc על השימוש ב- רְכִיב. אנו יכולים להבחין בהבדל:

אמנם הפירוק עוזר מאוד אך לא תמיד נותן תמונה מלאה. קוד המקור המלא נותן לנו תמונה מלאה.

3. פירוק שורת הפקודה

לפני תוספי IDE, שורת הפקודה שימשה לפירוק שיעורים. מפענחי שורת פקודה יכולים להיות שימושיים גם לצורך ניפוי באגים בקוד Java byt בשרת מרוחק שאינו נגיש באמצעות IDE או GUI.

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

java -jar JDCommandLine.jar $ {TARGET_JAR_NAME} .jar ./classes

אל תשאיר את הפרמטר ./classes. הוא מגדיר את ספריית הפלט.

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

4. מסקנה

בדקנו פירוק ב- IDE של Eclipse ו- IntelliJ וכן אפשרות של שורת פקודה כאשר הם אינם זמינים.

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


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