デバッガのしくみ(JDI)を学んでみよう

1,296
-1

Published on

JJUG CCC 2015 Fall #ccc_cd5 の資料です

Published in: Technology
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,296
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
6
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

デバッガのしくみ(JDI)を学んでみよう

  1. 1. "EH-f iri# @~'~: F'_, IE; EIT ~evf m* 1 t a: * w' , '“v_L __ 1 _ _r A , '_` . II . ` 'V{'U` "VI" L- *gr _. _._ _n__. .__
  2. 2. Agenda - 33/ U) 73 034133537* - JDI(Java Debug Interfacemêêñ
  3. 3. *f* . I I: I r~latggklzliln` L". -r ? Utan " nagffny yg; a. a I-I I'- E rr > 'ñ . A
  4. 4. F: ) TW 730Jl: l:%E3>*(J PDA) JPDA - Java Platform Debugger Architecture JVM TI - JavaVM Tool Interface JaVaVMODHPEUDêEEY5R 7`| /477|'3'f D | *03êQ7E% "J-JLODTCZSDUD4D /97I-X0)TE%(3?~47'-4 74 >/ >"7I-7x)
  5. 5. 7-7 W 750341363370 PDA) JPDA - Java Platform Debugger Architecture JDWP - Java Debug Wire Protocol ? KWHODJaVaVM - 9-70 | *JavaVMF'aEJ03 @EYD #IUI/ wii j
  6. 6. 7-7 W jfioliflñmJ PDA) JPDA - Java Platform Debugger Architecture JDI - Java Debug Interface é-**~s. *~"`)'^` . `r *YIIAI 7, . . ` l l @IEIODZISE ° ? ITWHFHODJaVa API
  7. 7. Agenda -Fmwñwumw - JDI(Java Debug Interfacemêêi? .
  8. 8. DI(Java Debug Interfacemêêñ (1) 371079033735 (2) 9-7& IWM/ Eiéf-T, (3) vMlziiñêisT-el? (4) 'J ? IX FdZ-(N) | =F: L-
  9. 9. ? «^ _ _. l~ _, A) AIIE-_Vr- " CT r' ' gisiiieal" lllli' agi* : Lc Ir ll` iatrtt Ir Ai . aritzeuczi*u`li*n; i'j . -:: |i`Il"I= _rl': `.`II*CIi" L. EI| ;.I`YHICIT_"i-"SFIZI Lc-rli-uacitr: ur
  10. 10. _V ihfv~r A: ,. ”el ' I_- y, , F) TW ñlHUbTU-J Titi D 9-O"`W _fi-VI | VM)J"5O)I&5ñ-ñ7i? l7`ê@47
  11. 11. 32405033215815' -7"`W FVM/ Eféñ / i-'TW lVM)3Tb`-)Tt72iD` 3* = JTW7Z`ilHU7JT%ZlCI%ñlCFI</947 AttachingConnector LaunchingConnector
  12. 12. 324050352358& -7"`W FVM/ Eféñ 15535êh537~09li3947 =7-7T`W7:`i73“5` 9-7& | VM037°l: l tXêiñlZiêg-fj LaunchingConnector
  13. 13. $09035235&9 -7`W FVM/ Eñ ? K562i - 5035558
  14. 14. ListeningConnector VirtualMachineManager manager = Bootstrap. VirtualMachineManager(); ListeningConnector connector = manager. listeningconnectors(). stream() . filter(lc -> lc. name(). equals( "com. sun. jdi. SocketListen")) . findAny(). orElseThrow( () -> new RuntimeException()); Map<String, Connector. Argument> map = connector. defaultArguments(); map. get("port"). setValue("8001"); VirtualMachine vm = connector. accept(map);
  15. 15. AttachingConnector VirtualMachineManager manager = Bootstrap. VirtualMachineManager(); AttachingConnector connector = manager. attachingconnectors(). stream() . filter(lc -> lc. name(). equals( "com. sun. jdi. SocketAttach")) . findAny(). orElseThrow( () -> new RuntimeException()); Map<String, Connector. Argument> map = connector. defaultArguments(); map. get("hostname"). setValue("localhost"); map. get("port"). setValue("8001"); VirtualMachine vm = connector. attach(map);
  16. 16. LaunchingConnector VirtualMachineManager manager = Bootstrap. VirtualMachineManager(); LaunchingConnector connector = manager. defaultConnector(); Map<String, Connector. Argument> map = connector. defaultArguments(); map. get("main"). setValue( TargetApp. class. getCanoniCalName()); String cp = System. getProperty("jaVa. class. path"); map. get("options"). setValue( "-classpath "" + cp + """); VirtualMachine vm = connector. launch(map);
  17. 17. ~>: <9-7`W l~VM037t7°~>3 > 34) TWjfibT AttachingConnector 0315.57 -agentlib: jdwp= transport= dt_socket, serVer= y,address=8001 7-7 TWjfibT ListeningConnector 035% -agentlib: jdwp= transport= dt_socket, address= myhost:8001
  18. 18. VMl:2~175i5l'F -D-F%%@95X-EEWE °XDWF-%EW% -Ofxêñiê - VME35$Uexit
  19. 19. 'JIX Ft4^`> #$1- EVentQueue
  20. 20. 'JIX Ft4^`> #$1- « ClassPrepareRequest EVentQueue
  21. 21. 'JIX Ft4^`> #$1- « ClassPrepareRequest l C1assPrepareEVent EVentQueue
  22. 22. 9-7Wl* ClassPrepareEVent 77R`W7J" ClassPrepareRequest EVentQueue
  23. 23. U9IXht$1-EH EVentRequestManager evman = Vm. eVentRequestManager(); ClassPrepareRequest cpreq = evman. createClassPrepareRequest(); cpreq. setSuspendPolicy( EVentRequest. SUSPEND_EVENT_THREAD); cpreq. enable(); EVentQueue queue = Vm. eVentQueue(); while(true) { Eventset eventset = queue. remoVe(); Eventlterator it = eVentSet. eVentIterator(); for(EVent event : eVentSet){ if(eVent instanceof ClassPrepareEVent){ / A2509525?) } eVentSet. resume();
  24. 24. 1 JI' VIIIII I" _l E-Véfçzlil; IEI'Ii`iiiF-'êifjllj3êiil 4 5 n '*-v *- '- '__. i.; ':: .f:3f: .F'l awali a I`Q A, _ r. : aig iific Ii' II F`; ,a| :i! |r4l%| :': ;:| li: l~*ieatzi*i~: i niii E: i_Iñ:3AyT"! ç.; T ijiuaraii] i*la! i:i-r~: i niii E: =~ . lii: F-i. a~ijii, is: s=ii: i _`1~ . Il g ' l L ». ['I@P'~Zg; .“*`l ~ | “iii-l a- W635i- i” fê: :i`i. ; 'Pnwiéffêféfé l, 3 " &gw PHP-EQ( 3513. I 45'; . “ 'r i. . a. .
  25. 25. 5&3tE5-fml LaunchingConnectorEiE5i5ê` i5i5t| j7l 35515-&73032 I*'J -AE EE5%m3tb5Um&KW77# UDlfiAiCTdTD-CDWOL/ _C LJ$5 EñE'| 'éE73*`35ê03`C“}$5-o
  26. 26. <5$Dê$E~%GQ 9-7`W | *VM73*`3=%TT2”êi5ê IET535êTTE 7-7 TW iiiiñlllaiiêlwtfciêwfiiêo U>7w5TU%%bTmi7ñ%%E 7-7 TW 9"W -J V545 2915.45( 1351914515? VMDisconnected ExceptionêêêêiiL/ E b J: 5 o
  27. 27. 5$3tE5-%m3 3010351555 3=ê5$mi57êbvabx 45555514 > Lrcmfctuwéññbvébx ? ) X9W9hD-X@EWEUTMhTêt 5%EmE9tD75@cE5o ~>I<i9IJ9i7JTZI >X bê99`ê7l4>fêê$êll TcRD7203lai1.4o IOEXceptionlCl/ Eaflzt 16D55l@@cb;5ñUmEB55 j
  28. 28. i-Irêiitt r, i; nGga-g ummi-gi . «j: ~; ingsfialvtagtgf]; m-*êjfiiç icas' lai? !Iii-;1iêI-! z~'5I! Ilçia-J~7IE 13.' hmñilêiêb, .iliilll `| I “I . =_`i= r*~iii'r~. uI r: v: iznñiçri. .~i. *~ri c. visa: ;maria. czçinpflaxvtamawfiçi~kiñiiz r~: :-:1,. --'; 'iç| i,; la| çfr, -T| raviiag-fi-: igffin-iiar. .html [Tiêlflisrvii 1313:; LITV5FHA`~`5EIAT` i 77-41-77” HNI Tetra l
  29. 29. $5& Tci/ xxTJDlfJ/ ubWllliVêIêj 730373* ?
  30. 30. 33130
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×