JDI

DadleFish

New member
JDI

טוב, אז אחרי ששאלתי פה בפורום בשבוע שעבר בעניין, אז הנה כמה מסקנות בעניין. 1. JDI הוא Java Debug Interface, שזה API שנועד לאפשר Debugging capabilities, בעיקר בצורה מרוחקת (כלומר מ-JVM אחר). זה אוסף package-ים של SUN, לא משהו בסטנדרט של JAVA אבל בכל זאת מ-SUN אז זה בסדר
2. את ה-JDI תמצאו בתוך tools.jar שנמצא תחת ספריית ה-lib בהתקנת ה-JDK. 3. קיים כמובן תיעוד מלא לכל העסק. ניתן דרך JDI להוציא מידע על התוכנה שרצה, בדיוק כאילו הייתם DEBUGGER - אפשר לעצור את התוכנית, להמשיך את ריצתה, לקבוע BREAKPOINTS, לתשאל מצב THREAD-ים וכו' וכו'. צירפתי קובץ שמדגים התחברות לאפליקציה רצה. כדי לגרום לעסק לתקתק יש להריץ אפליקציה מסוימת במצב DEBUG ותוך פתיחת PORT ייעודי שמקשיב לכניסות מ-JVM-ים חיצוניים. הנה הצורה להריץ למשל:
D:\Sources\Java\DebugDemo>java -Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,server=y,address=8000,suspend=n -Djava.co mpiler=NONE com.eldad.debugdemo.DebugDemo​
לאחר מכן יש להריץ את ה-class המצורפת (שנו ל-java.). מטבע הדברים מדובר ב-demo בלבד, אז אל תשימו לב לכל מיני שטויות כמו טיפול לקוי ב-exceptions וכו'. זה לא קוד מבצעי
 

DadleFish

New member
וזה הפלט:

Successfully connected to the application. Virtual Machine description = Java Debug Interface (Reference Implementation) version 1.4 Java Debug Wire Protocol (Reference Implementation) version 1.4 JVM Debug Interface version 1.3 JVM version 1.4.2_06 (Java HotSpot(TM) Client VM, mixed mode) Virtual Machine name = Java HotSpot(TM) Client VM Virtual Machine version = 1.4.2_06 Suspending... 1... 2... 3... 4... 5... Resuming Thread #1 Name = DestroyJavaVM Status = Running Thread #2 Name = Thread-1 Status = Running #1 (Unknown source) writeBytes [-1] #2 (Unknown source) write [-1] #3 (Unknown source) flushBuffer [-1] #4 (Unknown source) flush [-1] #5 (Unknown source) write [-1] #6 (Unknown source) writeBytes [-1] #7 (Unknown source) implFlushBuffer [-1] #8 (Unknown source) flushBuffer [-1] #9 (Unknown source) flushBuffer [-1] #10 (Unknown source) newLine [-1] #11 (Unknown source) println [-1] #12 DebugDemo.java run [69] Thread #3 Name = Thread-0 Status = Monitor #1 (Unknown source) println [-1] #2 DebugDemo.java run [54] Thread #4 Name = Signal Dispatcher Status = Running Thread #5 Name = Finalizer Status = Wait #1 (Unknown source) wait [-1] #2 (Unknown source) remove [-1] #3 (Unknown source) remove [-1] #4 (Unknown source) run [-1] Thread #6 Name = Reference Handler Status = Wait #1 (Unknown source) wait [-1] #2 (Unknown source) wait [-1] #3 (Unknown source) run [-1] End of the information report.​
 
למעלה