[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
Re: [aspectj-users] LTW : thisJoinPoint.getStaticPart().getSourceLocation().getLine() always returns 0
|
Hi,
I am not an expert of javap analysis.
I try to join the whole trace.
I think you are right. decompiling the TestingClass with JD-GUI,
doesn't show any line number.
has i made something wrong, at compilation time ?
extract of javap -verbose TestingClass :
public class jlp.aspectj.test.TestingClass extends
java.lang.Object implements java.lang.Runnable
minor version: 0
major version: 49
Constant pool:
const #1 = Field #40.#69; //
jlp/aspectj/test/TestingClass.name:Ljava/lang/String;
const #2 = Method #44.#70; //
java/lang/Object."<init>":()V
const #3 = String #71; //
const #4 = Field #40.#72; //
jlp/aspectj/test/TestingClass.running:Z
const #5 = int 1000000;
const #6 = Field #40.#73; //
jlp/aspectj/test/TestingClass.limit:I
const #7 = class #74; // java/lang/Thread
const #8 = Method #7.#75; //
java/lang/Thread."<init>":(Ljava/lang/Runnable;)V
const #9 = Field #40.#76; //
jlp/aspectj/test/TestingClass.thread:Ljava/lang/Thread;
const #10 = String #77; // no_name
const #11 = Method #40.#78; //
jlp/aspectj/test/TestingClass."<init>":(Ljava/lang/String;)V
const #12 = Field #79.#80; //
java/lang/System.out:Ljava/io/PrintStream;
const #13 = class #81; // java/lang/StringBuilder
const #14 = Method #13.#70; //
java/lang/StringBuilder."<init>":()V
const #15 = Method #13.#82; //
java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
const #16 = String #83; // .myShortMethod : I will sleep
for 100 ms
const #17 = Method #13.#84; //
java/lang/StringBuilder.toString:()Ljava/lang/String;
const #18 = Method #85.#86; //
java/io/PrintStream.println:(Ljava/lang/String;)V
const #19 = long 100l;
const #21 = Method #7.#87; // java/lang/Thread.sleep:(J)V
const #22 = class #88; // java/lang/InterruptedException
const #23 = Method #22.#89; //
java/lang/InterruptedException.printStackTrace:()V
const #24 = String #90; // .myLongMethod : I will sleep for
1s
const #25 = long 1000l;
const #27 = class #91; // java/util/HashMap
const #28 = Method #27.#70; //
java/util/HashMap."<init>":()V
const #29 = String #92; // .myStressingMethod : limit=
const #30 = Method #13.#93; //
java/lang/StringBuilder.append:(I)Ljava/lang/StringBuilder;
const #31 = class #94; // java/lang/Integer
const #32 = Method #31.#95; //
java/lang/Integer."<init>":(I)V
const #33 = Method #31.#84; //
java/lang/Integer.toString:()Ljava/lang/String;
const #34 = Method #27.#96; //
java/util/HashMap.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
const #35 = Method #27.#97; // java/util/HashMap.clear:()V
const #36 = Method #40.#98; //
jlp/aspectj/test/TestingClass.myShortMethod:()V
const #37 = Method #40.#99; //
jlp/aspectj/test/TestingClass.myStressingMethod:(I)V
const #38 = Method #40.#100; //
jlp/aspectj/test/TestingClass.myLongMethod:()V
const #39 = Method #31.#101; //
java/lang/Integer.parseInt:(Ljava/lang/String;)I
const #40 = class #102; // jlp/aspectj/test/TestingClass
const #41 = String #103; // thread_
const #42 = Method #40.#104; //
jlp/aspectj/test/TestingClass."<init>":(Ljava/lang/String;I)V
const #43 = Method #7.#105; // java/lang/Thread.start:()V
const #44 = class #106; // java/lang/Object
const #45 = class #107; // java/lang/Runnable
const #46 = Asciz name;
const #47 = Asciz Ljava/lang/String;;
const #48 = Asciz running;
const #49 = Asciz Z;
const #50 = Asciz limit;
const #51 = Asciz I;
const #52 = Asciz thread;
const #53 = Asciz Ljava/lang/Thread;;
const #54 = Asciz getName;
const #55 = Asciz ()Ljava/lang/String;;
const #56 = Asciz Code;
const #57 = Asciz setName;
const #58 = Asciz (Ljava/lang/String;)V;
const #59 = Asciz <init>;
const #60 = Asciz (Ljava/lang/String;I)V;
const #61 = Asciz ()V;
const #62 = Asciz myShortMethod;
const #63 = Asciz myLongMethod;
const #64 = Asciz myStressingMethod;
const #65 = Asciz (I)V;
const #66 = Asciz run;
const #67 = Asciz main;
const #68 = Asciz ([Ljava/lang/String;)V;
const #69 = NameAndType #46:#47;// name:Ljava/lang/String;
const #70 = NameAndType #59:#61;// "<init>":()V
const #71 = Asciz ;
const #72 = NameAndType #48:#49;// running:Z
const #73 = NameAndType #50:#51;// limit:I
const #74 = Asciz java/lang/Thread;
const #75 = NameAndType #59:#108;//
"<init>":(Ljava/lang/Runnable;)V
const #76 = NameAndType #52:#53;// thread:Ljava/lang/Thread;
const #77 = Asciz no_name;
const #78 = NameAndType #59:#58;//
"<init>":(Ljava/lang/String;)V
const #79 = class #109; // java/lang/System
const #80 = NameAndType #110:#111;// out:Ljava/io/PrintStream;
const #81 = Asciz java/lang/StringBuilder;
const #82 = NameAndType #112:#113;//
append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
const #83 = Asciz .myShortMethod : I will sleep for 100 ms;
const #84 = NameAndType #114:#55;//
toString:()Ljava/lang/String;
const #85 = class #115; // java/io/PrintStream
const #86 = NameAndType #116:#58;//
println:(Ljava/lang/String;)V
const #87 = NameAndType #117:#118;// sleep:(J)V
const #88 = Asciz java/lang/InterruptedException;
const #89 = NameAndType #119:#61;// printStackTrace:()V
const #90 = Asciz .myLongMethod : I will sleep for 1s;
const #91 = Asciz java/util/HashMap;
const #92 = Asciz .myStressingMethod : limit=;
const #93 = NameAndType #112:#120;//
append:(I)Ljava/lang/StringBuilder;
const #94 = Asciz java/lang/Integer;
const #95 = NameAndType #59:#65;// "<init>":(I)V
const #96 = NameAndType #121:#122;//
put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
const #97 = NameAndType #123:#61;// clear:()V
const #98 = NameAndType #62:#61;// myShortMethod:()V
const #99 = NameAndType #64:#65;// myStressingMethod:(I)V
const #100 = NameAndType #63:#61;// myLongMethod:()V
const #101 = NameAndType #124:#125;//
parseInt:(Ljava/lang/String;)I
const #102 = Asciz jlp/aspectj/test/TestingClass;
const #103 = Asciz thread_;
const #104 = NameAndType #59:#60;//
"<init>":(Ljava/lang/String;I)V
const #105 = NameAndType #126:#61;// start:()V
const #106 = Asciz java/lang/Object;
const #107 = Asciz java/lang/Runnable;
const #108 = Asciz (Ljava/lang/Runnable;)V;
const #109 = Asciz java/lang/System;
const #110 = Asciz out;
const #111 = Asciz Ljava/io/PrintStream;;
const #112 = Asciz append;
const #113 = Asciz
(Ljava/lang/String;)Ljava/lang/StringBuilder;;
const #114 = Asciz toString;
const #115 = Asciz java/io/PrintStream;
const #116 = Asciz println;
const #117 = Asciz sleep;
const #118 = Asciz (J)V;
const #119 = Asciz printStackTrace;
const #120 = Asciz (I)Ljava/lang/StringBuilder;;
const #121 = Asciz put;
const #122 = Asciz
(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;;
const #123 = Asciz clear;
const #124 = Asciz parseInt;
const #125 = Asciz (Ljava/lang/String;)I;
const #126 = Asciz start;
Le 28/12/2012 02:54, Andy Clement a écrit :
Hi,
Can you confirm
if the code you are load time weaving into has line number
table entries? Use javap with -verbose to see them if they
are there, look for one attached to each method. If they
are missing that explains it, if they are not missing it
seems like a bug.
cheers,
Andy
_______________________________________________
aspectj-users mailing list
aspectj-users@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/aspectj-users
|
public class jlp.aspectj.test.TestingClass extends java.lang.Object implements java.lang.Runnable
minor version: 0
major version: 49
Constant pool:
const #1 = Field #40.#69; // jlp/aspectj/test/TestingClass.name:Ljava/lang/String;
const #2 = Method #44.#70; // java/lang/Object."<init>":()V
const #3 = String #71; //
const #4 = Field #40.#72; // jlp/aspectj/test/TestingClass.running:Z
const #5 = int 1000000;
const #6 = Field #40.#73; // jlp/aspectj/test/TestingClass.limit:I
const #7 = class #74; // java/lang/Thread
const #8 = Method #7.#75; // java/lang/Thread."<init>":(Ljava/lang/Runnable;)V
const #9 = Field #40.#76; // jlp/aspectj/test/TestingClass.thread:Ljava/lang/Thread;
const #10 = String #77; // no_name
const #11 = Method #40.#78; // jlp/aspectj/test/TestingClass."<init>":(Ljava/lang/String;)V
const #12 = Field #79.#80; // java/lang/System.out:Ljava/io/PrintStream;
const #13 = class #81; // java/lang/StringBuilder
const #14 = Method #13.#70; // java/lang/StringBuilder."<init>":()V
const #15 = Method #13.#82; // java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
const #16 = String #83; // .myShortMethod : I will sleep for 100 ms
const #17 = Method #13.#84; // java/lang/StringBuilder.toString:()Ljava/lang/String;
const #18 = Method #85.#86; // java/io/PrintStream.println:(Ljava/lang/String;)V
const #19 = long 100l;
const #21 = Method #7.#87; // java/lang/Thread.sleep:(J)V
const #22 = class #88; // java/lang/InterruptedException
const #23 = Method #22.#89; // java/lang/InterruptedException.printStackTrace:()V
const #24 = String #90; // .myLongMethod : I will sleep for 1s
const #25 = long 1000l;
const #27 = class #91; // java/util/HashMap
const #28 = Method #27.#70; // java/util/HashMap."<init>":()V
const #29 = String #92; // .myStressingMethod : limit=
const #30 = Method #13.#93; // java/lang/StringBuilder.append:(I)Ljava/lang/StringBuilder;
const #31 = class #94; // java/lang/Integer
const #32 = Method #31.#95; // java/lang/Integer."<init>":(I)V
const #33 = Method #31.#84; // java/lang/Integer.toString:()Ljava/lang/String;
const #34 = Method #27.#96; // java/util/HashMap.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
const #35 = Method #27.#97; // java/util/HashMap.clear:()V
const #36 = Method #40.#98; // jlp/aspectj/test/TestingClass.myShortMethod:()V
const #37 = Method #40.#99; // jlp/aspectj/test/TestingClass.myStressingMethod:(I)V
const #38 = Method #40.#100; // jlp/aspectj/test/TestingClass.myLongMethod:()V
const #39 = Method #31.#101; // java/lang/Integer.parseInt:(Ljava/lang/String;)I
const #40 = class #102; // jlp/aspectj/test/TestingClass
const #41 = String #103; // thread_
const #42 = Method #40.#104; // jlp/aspectj/test/TestingClass."<init>":(Ljava/lang/String;I)V
const #43 = Method #7.#105; // java/lang/Thread.start:()V
const #44 = class #106; // java/lang/Object
const #45 = class #107; // java/lang/Runnable
const #46 = Asciz name;
const #47 = Asciz Ljava/lang/String;;
const #48 = Asciz running;
const #49 = Asciz Z;
const #50 = Asciz limit;
const #51 = Asciz I;
const #52 = Asciz thread;
const #53 = Asciz Ljava/lang/Thread;;
const #54 = Asciz getName;
const #55 = Asciz ()Ljava/lang/String;;
const #56 = Asciz Code;
const #57 = Asciz setName;
const #58 = Asciz (Ljava/lang/String;)V;
const #59 = Asciz <init>;
const #60 = Asciz (Ljava/lang/String;I)V;
const #61 = Asciz ()V;
const #62 = Asciz myShortMethod;
const #63 = Asciz myLongMethod;
const #64 = Asciz myStressingMethod;
const #65 = Asciz (I)V;
const #66 = Asciz run;
const #67 = Asciz main;
const #68 = Asciz ([Ljava/lang/String;)V;
const #69 = NameAndType #46:#47;// name:Ljava/lang/String;
const #70 = NameAndType #59:#61;// "<init>":()V
const #71 = Asciz ;
const #72 = NameAndType #48:#49;// running:Z
const #73 = NameAndType #50:#51;// limit:I
const #74 = Asciz java/lang/Thread;
const #75 = NameAndType #59:#108;// "<init>":(Ljava/lang/Runnable;)V
const #76 = NameAndType #52:#53;// thread:Ljava/lang/Thread;
const #77 = Asciz no_name;
const #78 = NameAndType #59:#58;// "<init>":(Ljava/lang/String;)V
const #79 = class #109; // java/lang/System
const #80 = NameAndType #110:#111;// out:Ljava/io/PrintStream;
const #81 = Asciz java/lang/StringBuilder;
const #82 = NameAndType #112:#113;// append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
const #83 = Asciz .myShortMethod : I will sleep for 100 ms;
const #84 = NameAndType #114:#55;// toString:()Ljava/lang/String;
const #85 = class #115; // java/io/PrintStream
const #86 = NameAndType #116:#58;// println:(Ljava/lang/String;)V
const #87 = NameAndType #117:#118;// sleep:(J)V
const #88 = Asciz java/lang/InterruptedException;
const #89 = NameAndType #119:#61;// printStackTrace:()V
const #90 = Asciz .myLongMethod : I will sleep for 1s;
const #91 = Asciz java/util/HashMap;
const #92 = Asciz .myStressingMethod : limit=;
const #93 = NameAndType #112:#120;// append:(I)Ljava/lang/StringBuilder;
const #94 = Asciz java/lang/Integer;
const #95 = NameAndType #59:#65;// "<init>":(I)V
const #96 = NameAndType #121:#122;// put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
const #97 = NameAndType #123:#61;// clear:()V
const #98 = NameAndType #62:#61;// myShortMethod:()V
const #99 = NameAndType #64:#65;// myStressingMethod:(I)V
const #100 = NameAndType #63:#61;// myLongMethod:()V
const #101 = NameAndType #124:#125;// parseInt:(Ljava/lang/String;)I
const #102 = Asciz jlp/aspectj/test/TestingClass;
const #103 = Asciz thread_;
const #104 = NameAndType #59:#60;// "<init>":(Ljava/lang/String;I)V
const #105 = NameAndType #126:#61;// start:()V
const #106 = Asciz java/lang/Object;
const #107 = Asciz java/lang/Runnable;
const #108 = Asciz (Ljava/lang/Runnable;)V;
const #109 = Asciz java/lang/System;
const #110 = Asciz out;
const #111 = Asciz Ljava/io/PrintStream;;
const #112 = Asciz append;
const #113 = Asciz (Ljava/lang/String;)Ljava/lang/StringBuilder;;
const #114 = Asciz toString;
const #115 = Asciz java/io/PrintStream;
const #116 = Asciz println;
const #117 = Asciz sleep;
const #118 = Asciz (J)V;
const #119 = Asciz printStackTrace;
const #120 = Asciz (I)Ljava/lang/StringBuilder;;
const #121 = Asciz put;
const #122 = Asciz (Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;;
const #123 = Asciz clear;
const #124 = Asciz parseInt;
const #125 = Asciz (Ljava/lang/String;)I;
const #126 = Asciz start;
{
public boolean running;
java.lang.Thread thread;
public java.lang.String getName();
Code:
Stack=1, Locals=1, Args_size=1
0: aload_0
1: getfield #1; //Field name:Ljava/lang/String;
4: areturn
public void setName(java.lang.String);
Code:
Stack=2, Locals=2, Args_size=2
0: aload_0
1: aload_1
2: putfield #1; //Field name:Ljava/lang/String;
5: return
public jlp.aspectj.test.TestingClass(java.lang.String, int);
Code:
Stack=4, Locals=3, Args_size=3
0: aload_0
1: invokespecial #2; //Method java/lang/Object."<init>":()V
4: aload_0
5: ldc #3; //String
7: putfield #1; //Field name:Ljava/lang/String;
10: aload_0
11: iconst_1
12: putfield #4; //Field running:Z
15: aload_0
16: ldc #5; //int 1000000
18: putfield #6; //Field limit:I
21: aload_0
22: new #7; //class java/lang/Thread
25: dup
26: aload_0
27: invokespecial #8; //Method java/lang/Thread."<init>":(Ljava/lang/Runnable;)V
30: putfield #9; //Field thread:Ljava/lang/Thread;
33: aload_0
34: aload_1
35: putfield #1; //Field name:Ljava/lang/String;
38: aload_0
39: iload_2
40: putfield #6; //Field limit:I
43: return
public jlp.aspectj.test.TestingClass(java.lang.String);
Code:
Stack=4, Locals=2, Args_size=2
0: aload_0
1: invokespecial #2; //Method java/lang/Object."<init>":()V
4: aload_0
5: ldc #3; //String
7: putfield #1; //Field name:Ljava/lang/String;
10: aload_0
11: iconst_1
12: putfield #4; //Field running:Z
15: aload_0
16: ldc #5; //int 1000000
18: putfield #6; //Field limit:I
21: aload_0
22: new #7; //class java/lang/Thread
25: dup
26: aload_0
27: invokespecial #8; //Method java/lang/Thread."<init>":(Ljava/lang/Runnable;)V
30: putfield #9; //Field thread:Ljava/lang/Thread;
33: aload_0
34: aload_1
35: putfield #1; //Field name:Ljava/lang/String;
38: return
public jlp.aspectj.test.TestingClass();
Code:
Stack=2, Locals=1, Args_size=1
0: aload_0
1: ldc #10; //String no_name
3: invokespecial #11; //Method "<init>":(Ljava/lang/String;)V
6: return
public void myShortMethod();
Code:
Stack=3, Locals=2, Args_size=1
0: getstatic #12; //Field java/lang/System.out:Ljava/io/PrintStream;
3: new #13; //class java/lang/StringBuilder
6: dup
7: invokespecial #14; //Method java/lang/StringBuilder."<init>":()V
10: aload_0
11: getfield #1; //Field name:Ljava/lang/String;
14: invokevirtual #15; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
17: ldc #16; //String .myShortMethod : I will sleep for 100 ms
19: invokevirtual #15; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
22: invokevirtual #17; //Method java/lang/StringBuilder.toString:()Ljava/lang/String;
25: invokevirtual #18; //Method java/io/PrintStream.println:(Ljava/lang/String;)V
28: ldc2_w #19; //long 100l
31: invokestatic #21; //Method java/lang/Thread.sleep:(J)V
34: goto 42
37: astore_1
38: aload_1
39: invokevirtual #23; //Method java/lang/InterruptedException.printStackTrace:()V
42: return
Exception table:
from to target type
28 34 37 Class java/lang/InterruptedException
public void myLongMethod();
Code:
Stack=3, Locals=2, Args_size=1
0: getstatic #12; //Field java/lang/System.out:Ljava/io/PrintStream;
3: new #13; //class java/lang/StringBuilder
6: dup
7: invokespecial #14; //Method java/lang/StringBuilder."<init>":()V
10: aload_0
11: getfield #1; //Field name:Ljava/lang/String;
14: invokevirtual #15; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
17: ldc #24; //String .myLongMethod : I will sleep for 1s
19: invokevirtual #15; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
22: invokevirtual #17; //Method java/lang/StringBuilder.toString:()Ljava/lang/String;
25: invokevirtual #18; //Method java/io/PrintStream.println:(Ljava/lang/String;)V
28: ldc2_w #25; //long 1000l
31: invokestatic #21; //Method java/lang/Thread.sleep:(J)V
34: goto 42
37: astore_1
38: aload_1
39: invokevirtual #23; //Method java/lang/InterruptedException.printStackTrace:()V
42: return
Exception table:
from to target type
28 34 37 Class java/lang/InterruptedException
public void myStressingMethod(int);
Code:
Stack=6, Locals=4, Args_size=2
0: new #27; //class java/util/HashMap
3: dup
4: invokespecial #28; //Method java/util/HashMap."<init>":()V
7: astore_2
8: getstatic #12; //Field java/lang/System.out:Ljava/io/PrintStream;
11: new #13; //class java/lang/StringBuilder
14: dup
15: invokespecial #14; //Method java/lang/StringBuilder."<init>":()V
18: aload_0
19: getfield #1; //Field name:Ljava/lang/String;
22: invokevirtual #15; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
25: ldc #29; //String .myStressingMethod : limit=
27: invokevirtual #15; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
30: iload_1
31: invokevirtual #30; //Method java/lang/StringBuilder.append:(I)Ljava/lang/StringBuilder;
34: invokevirtual #17; //Method java/lang/StringBuilder.toString:()Ljava/lang/String;
37: invokevirtual #18; //Method java/io/PrintStream.println:(Ljava/lang/String;)V
40: iconst_0
41: istore_3
42: iload_3
43: iload_1
44: if_icmpge 84
47: aload_2
48: new #31; //class java/lang/Integer
51: dup
52: iload_3
53: bipush 100
55: irem
56: invokespecial #32; //Method java/lang/Integer."<init>":(I)V
59: invokevirtual #33; //Method java/lang/Integer.toString:()Ljava/lang/String;
62: new #31; //class java/lang/Integer
65: dup
66: iload_3
67: sipush 1000
70: irem
71: invokespecial #32; //Method java/lang/Integer."<init>":(I)V
74: invokevirtual #34; //Method java/util/HashMap.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
77: pop
78: iinc 3, 1
81: goto 42
84: aload_2
85: invokevirtual #35; //Method java/util/HashMap.clear:()V
88: return
public void run();
Code:
Stack=2, Locals=1, Args_size=1
0: aload_0
1: getfield #4; //Field running:Z
4: ifeq 26
7: aload_0
8: invokevirtual #36; //Method myShortMethod:()V
11: aload_0
12: aload_0
13: getfield #6; //Field limit:I
16: invokevirtual #37; //Method myStressingMethod:(I)V
19: aload_0
20: invokevirtual #38; //Method myLongMethod:()V
23: goto 0
26: return
public static void main(java.lang.String[]);
Code:
Stack=7, Locals=3, Args_size=1
0: aload_0
1: iconst_0
2: aaload
3: invokestatic #39; //Method java/lang/Integer.parseInt:(Ljava/lang/String;)I
6: anewarray #40; //class jlp/aspectj/test/TestingClass
9: astore_1
10: iconst_0
11: istore_2
12: iload_2
13: aload_1
14: arraylength
15: if_icmpge 68
18: aload_1
19: iload_2
20: new #40; //class jlp/aspectj/test/TestingClass
23: dup
24: new #13; //class java/lang/StringBuilder
27: dup
28: invokespecial #14; //Method java/lang/StringBuilder."<init>":()V
31: ldc #41; //String thread_
33: invokevirtual #15; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
36: iload_2
37: invokevirtual #30; //Method java/lang/StringBuilder.append:(I)Ljava/lang/StringBuilder;
40: invokevirtual #17; //Method java/lang/StringBuilder.toString:()Ljava/lang/String;
43: aload_0
44: iconst_1
45: aaload
46: invokestatic #39; //Method java/lang/Integer.parseInt:(Ljava/lang/String;)I
49: invokespecial #42; //Method "<init>":(Ljava/lang/String;I)V
52: aastore
53: aload_1
54: iload_2
55: aaload
56: getfield #9; //Field thread:Ljava/lang/Thread;
59: invokevirtual #43; //Method java/lang/Thread.start:()V
62: iinc 2, 1
65: goto 12
68: return
}