Hi All,
Ok in my case the ASMifier helped me solve my problem with my
modifications to jacoco's ASM code. I needed a POP instead of a ASTORE
and also had some issues calculating the max stack size (ended up creating
a StackHelper).
This code will end up at tests4j_4jacoco on git hub at some point,
hopefully in May.
Cheers,
Scott
---------- Forwarded message ----------
From: Scott Morgan <[email protected]>
Date: Sat, Apr 19, 2014 at 8:40 PM
Subject: java.lang.VerifyError: Inconsistent stackmap frames at branch
target 105 in method
org.adligo.tests4j_tests.models.shared.system.Tests4J_ParamsTrial.testDefaultParams()V
at offset 75
To: [email protected]
Hi,
I am rather new to using ASM (about 3 days). I am trying to modify some
classes from jacoco so that it uses a java.util.Map interface to store it's
data instead of a boolean[]. I am planning to implement the Map my self,
this is so that I can record code coverage at different levels (i.e.
Coverage for a test run, Coverage for a specific test class, Coverage for a
specific test method).
Things are going ok, but I am getting the following error;
java.lang.VerifyError: Inconsistent stackmap frames at branch target 105 in
method
org.adligo.tests4j_tests.models.shared.system.Tests4J_ParamsTrial.testDefaultParams()V
at offset 75
Attached is the view of the instrumented class from eclipse (which fails),
which looks ok to me.
Does anyone have any advice on fixing a issue like this?
When I compare it to a instrumented class that works I can't see much of a
difference between the goto (line 75), line 105 and the goto in the working
class. I have two ways of instrumenting the code in the project I am
working on (they share most of the same methods exc). One is like jacoco
(where a boolean[] stores coverage data), the other uses a Map.
I have been searching and reading about stackmap frames all over (JVM spec,
web exc) but can't seem to figure out how to fix the issue as the byte code
seems ok to me.
TIA,
Scott
--
You received this message because you are subscribed to the Google Groups
"JaCoCo and EclEmma Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.
// Compiled from Tests4J_ParamsTrial.java (version 1.7 : 51.0, super bit)
@org.adligo.tests4j.models.shared.SourceFileScope(sourceClass=org.adligo.tests4j.models.shared.system.Tests4J_Params)
public class org.adligo.tests4j_tests.models.shared.system.Tests4J_ParamsTrial
extends org.adligo.tests4j.models.shared.SourceFileTrial {
// Field descriptor #92 Ljava/util/Map;
private static transient synthetic java.util.Map $jacocoData;
// Method descriptor #6 ()V
// Stack: 5, Locals: 2
public Tests4J_ParamsTrial();
0 invokestatic
org.adligo.tests4j_tests.models.shared.system.Tests4J_ParamsTrial.$jacocoInit()
: java.util.Map [72]
3 astore_1
4 aload_0 [this]
5 invokespecial org.adligo.tests4j.models.shared.SourceFileTrial() [8]
8 aload_1
9 dup
10 ldc <Integer 0> [73]
12 invokestatic java.lang.Integer.valueOf(int) : java.lang.Integer [28]
15 ldc <String "true"> [75]
17 invokestatic java.lang.Boolean.valueOf(java.lang.String) :
java.lang.Boolean [80]
20 invokeinterface java.util.Map.put(java.lang.Object, java.lang.Object) :
java.lang.Object [86] [nargs: 3]
25 astore_1
26 return
Line numbers:
[pc: 4, line: 13]
Local variable table:
[pc: 4, pc: 27] local: this index: 0 type:
org.adligo.tests4j_tests.models.shared.system.Tests4J_ParamsTrial
// Method descriptor #6 ()V
// Stack: 7, Locals: 5
@org.adligo.tests4j.models.shared.Test
public void testDefaultParams();
0 invokestatic
org.adligo.tests4j_tests.models.shared.system.Tests4J_ParamsTrial.$jacocoInit()
: java.util.Map [72]
3 astore_1
4 new org.adligo.tests4j.models.shared.system.Tests4J_Params [17]
7 dup
8 invokespecial org.adligo.tests4j.models.shared.system.Tests4J_Params()
[19]
11 astore_2 [params]
12 aload_2 [params]
13 invokevirtual
org.adligo.tests4j.models.shared.system.Tests4J_Params.getTrials() :
java.util.List [20]
16 astore_3 [trials]
17 aload_0 [this]
18 aload_3 [trials]
19 invokevirtual
org.adligo.tests4j_tests.models.shared.system.Tests4J_ParamsTrial.assertNotNull(java.lang.Object)
: void [24]
22 aload_0 [this]
23 iconst_0
24 invokestatic java.lang.Integer.valueOf(int) : java.lang.Integer [28]
27 aload_3 [trials]
28 invokeinterface java.util.List.size() : int [34] [nargs: 1]
33 invokestatic java.lang.Integer.valueOf(int) : java.lang.Integer [28]
36 invokevirtual
org.adligo.tests4j_tests.models.shared.system.Tests4J_ParamsTrial.assertEquals(java.lang.Object,
java.lang.Object) : void [40]
39 aload_0 [this]
40 iconst_0
41 invokestatic java.lang.Integer.valueOf(int) : java.lang.Integer [28]
44 aload_2 [params]
45 invokevirtual
org.adligo.tests4j.models.shared.system.Tests4J_Params.getThreadPoolSize() :
int [44]
48 invokestatic java.lang.Integer.valueOf(int) : java.lang.Integer [28]
51 invokevirtual
org.adligo.tests4j_tests.models.shared.system.Tests4J_ParamsTrial.assertEquals(java.lang.Object,
java.lang.Object) : void [40]
54 iconst_0
55 istore 4 [i]
57 aload_1
58 dup
59 ldc <Integer 1> [87]
61 invokestatic java.lang.Integer.valueOf(int) : java.lang.Integer [28]
64 ldc <String "true"> [75]
66 invokestatic java.lang.Boolean.valueOf(java.lang.String) :
java.lang.Boolean [80]
69 invokeinterface java.util.Map.put(java.lang.Object, java.lang.Object)
: java.lang.Object [86] [nargs: 3]
74 astore_1
75 goto 105
78 aload_2 [params]
79 ldc <Class
org.adligo.tests4j_tests.models.shared.system.Tests4J_ParamsTrial> [1]
81 invokevirtual
org.adligo.tests4j.models.shared.system.Tests4J_Params.addTrial(java.lang.Class)
: void [47]
84 iinc 4 1 [i]
87 aload_1
88 dup
89 ldc <Integer 2> [88]
91 invokestatic java.lang.Integer.valueOf(int) : java.lang.Integer [28]
94 ldc <String "true"> [75]
96 invokestatic java.lang.Boolean.valueOf(java.lang.String) :
java.lang.Boolean [80]
99 invokeinterface java.util.Map.put(java.lang.Object, java.lang.Object)
: java.lang.Object [86] [nargs: 3]
104 astore_1
105 iload 4 [i]
107 bipush 32
109 if_icmplt 78
112 aload_0 [this]
113 bipush 32
115 invokestatic java.lang.Integer.valueOf(int) : java.lang.Integer [28]
118 aload_2 [params]
119 invokevirtual
org.adligo.tests4j.models.shared.system.Tests4J_Params.getThreadPoolSize() :
int [44]
122 invokestatic java.lang.Integer.valueOf(int) : java.lang.Integer [28]
125 invokevirtual
org.adligo.tests4j_tests.models.shared.system.Tests4J_ParamsTrial.assertEquals(java.lang.Object,
java.lang.Object) : void [40]
128 aload_1
129 dup
130 ldc <Integer 3> [89]
132 invokestatic java.lang.Integer.valueOf(int) : java.lang.Integer [28]
135 ldc <String "true"> [75]
137 invokestatic java.lang.Boolean.valueOf(java.lang.String) :
java.lang.Boolean [80]
140 invokeinterface java.util.Map.put(java.lang.Object, java.lang.Object)
: java.lang.Object [86] [nargs: 3]
145 astore_1
146 return
Line numbers:
[pc: 4, line: 17]
[pc: 12, line: 19]
[pc: 17, line: 20]
[pc: 22, line: 21]
[pc: 39, line: 22]
[pc: 54, line: 24]
[pc: 78, line: 25]
[pc: 84, line: 24]
[pc: 112, line: 27]
[pc: 128, line: 29]
Local variable table:
[pc: 4, pc: 147] local: this index: 0 type:
org.adligo.tests4j_tests.models.shared.system.Tests4J_ParamsTrial
[pc: 12, pc: 147] local: params index: 2 type:
org.adligo.tests4j.models.shared.system.Tests4J_Params
[pc: 17, pc: 147] local: trials index: 3 type: java.util.List
[pc: 57, pc: 112] local: i index: 4 type: int
Local variable type table:
[pc: 17, pc: 147] local: trials index: 3 type:
java.util.List<java.lang.Class<? extends
org.adligo.tests4j.models.shared.I_AbstractTrial>>
Stack map table: number of frames 2
[pc: 78, full, stack: {}, locals:
{org.adligo.tests4j_tests.models.shared.system.Tests4J_ParamsTrial,
java.util.Map, org.adligo.tests4j.models.shared.system.Tests4J_Params,
java.util.List, int}]
[pc: 105, same]
// Method descriptor #6 ()V
// Stack: 8, Locals: 4
@org.adligo.tests4j.models.shared.Test
public void testOneTrialRunParams();
0 invokestatic
org.adligo.tests4j_tests.models.shared.system.Tests4J_ParamsTrial.$jacocoInit()
: java.util.Map [72]
3 astore_1
4 new org.adligo.tests4j.models.shared.system.Tests4J_Params [17]
7 dup
8 invokespecial org.adligo.tests4j.models.shared.system.Tests4J_Params()
[19]
11 astore_2 [params]
12 aload_2 [params]
13 ldc <Class
org.adligo.tests4j_tests.models.shared.system.Tests4J_ParamsTrial> [1]
15 invokevirtual
org.adligo.tests4j.models.shared.system.Tests4J_Params.addTrial(java.lang.Class)
: void [47]
18 aload_2 [params]
19 invokevirtual
org.adligo.tests4j.models.shared.system.Tests4J_Params.getTrials() :
java.util.List [20]
22 astore_3 [trials]
23 aload_0 [this]
24 aload_3 [trials]
25 invokevirtual
org.adligo.tests4j_tests.models.shared.system.Tests4J_ParamsTrial.assertNotNull(java.lang.Object)
: void [24]
28 aload_0 [this]
29 iconst_1
30 invokestatic java.lang.Integer.valueOf(int) : java.lang.Integer [28]
33 aload_3 [trials]
34 invokeinterface java.util.List.size() : int [34] [nargs: 1]
39 invokestatic java.lang.Integer.valueOf(int) : java.lang.Integer [28]
42 invokevirtual
org.adligo.tests4j_tests.models.shared.system.Tests4J_ParamsTrial.assertEquals(java.lang.Object,
java.lang.Object) : void [40]
45 aload_0 [this]
46 ldc <Class
org.adligo.tests4j_tests.models.shared.system.Tests4J_ParamsTrial> [1]
48 aload_3 [trials]
49 iconst_0
50 invokeinterface java.util.List.get(int) : java.lang.Object [61] [nargs:
2]
55 invokevirtual
org.adligo.tests4j_tests.models.shared.system.Tests4J_ParamsTrial.assertEquals(java.lang.Object,
java.lang.Object) : void [40]
58 aload_0 [this]
59 iconst_1
60 invokestatic java.lang.Integer.valueOf(int) : java.lang.Integer [28]
63 aload_2 [params]
64 invokevirtual
org.adligo.tests4j.models.shared.system.Tests4J_Params.getThreadPoolSize() :
int [44]
67 invokestatic java.lang.Integer.valueOf(int) : java.lang.Integer [28]
70 invokevirtual
org.adligo.tests4j_tests.models.shared.system.Tests4J_ParamsTrial.assertEquals(java.lang.Object,
java.lang.Object) : void [40]
73 aload_1
74 dup
75 ldc <Integer 4> [90]
77 invokestatic java.lang.Integer.valueOf(int) : java.lang.Integer [28]
80 ldc <String "true"> [75]
82 invokestatic java.lang.Boolean.valueOf(java.lang.String) :
java.lang.Boolean [80]
85 invokeinterface java.util.Map.put(java.lang.Object, java.lang.Object) :
java.lang.Object [86] [nargs: 3]
90 astore_1
91 return
Line numbers:
[pc: 4, line: 33]
[pc: 12, line: 34]
[pc: 18, line: 36]
[pc: 23, line: 37]
[pc: 28, line: 38]
[pc: 45, line: 39]
[pc: 58, line: 40]
[pc: 73, line: 41]
Local variable table:
[pc: 4, pc: 92] local: this index: 0 type:
org.adligo.tests4j_tests.models.shared.system.Tests4J_ParamsTrial
[pc: 12, pc: 92] local: params index: 2 type:
org.adligo.tests4j.models.shared.system.Tests4J_Params
[pc: 23, pc: 92] local: trials index: 3 type: java.util.List
Local variable type table:
[pc: 23, pc: 92] local: trials index: 3 type:
java.util.List<java.lang.Class<? extends
org.adligo.tests4j.models.shared.I_AbstractTrial>>
// Method descriptor #70 ()Ljava/util/Map;
// Stack: 5, Locals: 0
private static final synthetic java.util.Map $jacocoInit();
0 getstatic
org.adligo.tests4j_tests.models.shared.system.Tests4J_ParamsTrial.$jacocoData :
java.util.Map [94]
3 dup
4 ifnonnull 139
7 pop
8 iconst_3
9 anewarray java.lang.Object [96]
12 dup
13 iconst_0
14 ldc2_w <Long -1055800533023415181> [97]
17 invokestatic java.lang.Long.valueOf(long) : java.lang.Long [103]
20 aastore
21 dup
22 iconst_1
23 ldc <String
"org/adligo/tests4j_tests/models/shared/system/Tests4J_ParamsTrial"> [104]
25 aastore
26 dup
27 iconst_2
28 iconst_5
29 invokestatic java.lang.Integer.valueOf(int) : java.lang.Integer [28]
32 aastore
33 dup
34 ldc <String "tests4j_4jacoco_channel"> [106]
36 invokestatic java.util.logging.Logger.getLogger(java.lang.String) :
java.util.logging.Logger [112]
39 swap
40 getstatic java.util.logging.Level.INFO : java.util.logging.Level [118]
43 swap
44 ldc <String "57142653"> [120]
46 swap
47 invokevirtual java.util.logging.Logger.log(java.util.logging.Level,
java.lang.String, java.lang.Object[]) : void [124]
50 iconst_0
51 aaload
52 checkcast java.util.Map [82]
55 dup
56 ldc <Integer 0> [73]
58 invokestatic java.lang.Integer.valueOf(int) : java.lang.Integer [28]
61 ldc <String "false"> [126]
63 invokestatic java.lang.Boolean.valueOf(java.lang.String) :
java.lang.Boolean [80]
66 invokeinterface java.util.Map.put(java.lang.Object, java.lang.Object)
: java.lang.Object [86] [nargs: 3]
71 dup
72 ldc <Integer 1> [87]
74 invokestatic java.lang.Integer.valueOf(int) : java.lang.Integer [28]
77 ldc <String "false"> [126]
79 invokestatic java.lang.Boolean.valueOf(java.lang.String) :
java.lang.Boolean [80]
82 invokeinterface java.util.Map.put(java.lang.Object, java.lang.Object)
: java.lang.Object [86] [nargs: 3]
87 dup
88 ldc <Integer 2> [88]
90 invokestatic java.lang.Integer.valueOf(int) : java.lang.Integer [28]
93 ldc <String "false"> [126]
95 invokestatic java.lang.Boolean.valueOf(java.lang.String) :
java.lang.Boolean [80]
98 invokeinterface java.util.Map.put(java.lang.Object, java.lang.Object)
: java.lang.Object [86] [nargs: 3]
103 dup
104 ldc <Integer 3> [89]
106 invokestatic java.lang.Integer.valueOf(int) : java.lang.Integer [28]
109 ldc <String "false"> [126]
111 invokestatic java.lang.Boolean.valueOf(java.lang.String) :
java.lang.Boolean [80]
114 invokeinterface java.util.Map.put(java.lang.Object, java.lang.Object)
: java.lang.Object [86] [nargs: 3]
119 dup
120 ldc <Integer 4> [90]
122 invokestatic java.lang.Integer.valueOf(int) : java.lang.Integer [28]
125 ldc <String "false"> [126]
127 invokestatic java.lang.Boolean.valueOf(java.lang.String) :
java.lang.Boolean [80]
130 invokeinterface java.util.Map.put(java.lang.Object, java.lang.Object)
: java.lang.Object [86] [nargs: 3]
135 dup
136 putstatic
org.adligo.tests4j_tests.models.shared.system.Tests4J_ParamsTrial.$jacocoData :
java.util.Map [94]
139 areturn
Stack map table: number of frames 1
[pc: 139, same_locals_1_stack_item_extended, stack: {java.util.Map}]
}