resess / Slicer4J

Slicer4J is an accurate, low-overhead dynamic slicer for Java programs.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Code instumentation errors

Lms24 opened this issue · comments

Hi there, I got another problem with Jar instrumentation.
I tried to slice test cases from javapoet and I got the following error message in instr-debug.log:

SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/home/lukas/workspace/master-jsr/slicer/Slicer4J/Slicer4J/target/slicer4j-jar-with-dependencies.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/home/lukas/workspace/master-jsr/slicer/Slicer4J/Slicer4J/target/lib/slf4j-simple-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.SimpleLoggerFactory]
[main] INFO JimpleWriter - initialize (17): Initializing Instrumenter
[main] INFO JimpleWriter - initialize (29): Initialization done
[main] INFO JimpleWriter - start (36): Running packs ... 
[main] INFO JimpleWriter - start (38): Writing output ... 
[main] INFO JimpleWriter - start (40): Output written ... 
[main] INFO JavaInstrumenter - initialize (78): Initializing Instrumenter
[main] INFO JavaInstrumenter - initialize (97): Initialization done
[main] INFO JavaInstrumenter - start (250): Running packs ... 
[main] INFO JavaInstrumenter - start (252): Writing output ... 
[Thread-57] ERROR heros.solver.CountingThreadPoolExecutor - Worker thread execution failed: value null
java.lang.IllegalArgumentException: value null
	at org.objectweb.asm.SymbolTable.addConstant(SymbolTable.java:501)
	at org.objectweb.asm.AnnotationWriter.visit(AnnotationWriter.java:259)
	at soot.AbstractASMBackend.generateAnnotationElems(AbstractASMBackend.java:595)
	at soot.AbstractASMBackend.generateAnnotationElems(AbstractASMBackend.java:549)
	at soot.AbstractASMBackend.generateAnnotations(AbstractASMBackend.java:521)
	at soot.AbstractASMBackend.generateMethods(AbstractASMBackend.java:355)
	at soot.AbstractASMBackend.generateByteCode(AbstractASMBackend.java:273)
	at soot.AbstractASMBackend.generateClassFile(AbstractASMBackend.java:224)
	at soot.PackManager.writeClass(PackManager.java:1141)
	at soot.PackManager.lambda$writeOutput$1(PackManager.java:699)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
	at java.base/java.lang.Thread.run(Thread.java:829)
Exception in thread "Thread-57" Exception in thread "main" java.lang.IllegalArgumentException: value null
	at org.objectweb.asm.SymbolTable.addConstant(SymbolTable.java:501)
	at org.objectweb.asm.AnnotationWriter.visit(AnnotationWriter.java:259)
	at soot.AbstractASMBackend.generateAnnotationElems(AbstractASMBackend.java:595)
	at soot.AbstractASMBackend.generateAnnotationElems(AbstractASMBackend.java:549)
	at soot.AbstractASMBackend.generateAnnotations(AbstractASMBackend.java:521)
	at soot.AbstractASMBackend.generateMethods(AbstractASMBackend.java:355)
	at soot.AbstractASMBackend.generateByteCode(AbstractASMBackend.java:273)
	at soot.AbstractASMBackend.generateClassFile(AbstractASMBackend.java:224)
	at soot.PackManager.writeClass(PackManager.java:1141)
	at soot.PackManager.lambda$writeOutput$1(PackManager.java:699)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
	at java.base/java.lang.Thread.run(Thread.java:829)
java.lang.IllegalArgumentException: value null
	at org.objectweb.asm.SymbolTable.addConstant(SymbolTable.java:501)
	at org.objectweb.asm.AnnotationWriter.visit(AnnotationWriter.java:259)
	at soot.AbstractASMBackend.generateAnnotationElems(AbstractASMBackend.java:595)
	at soot.AbstractASMBackend.generateAnnotationElems(AbstractASMBackend.java:549)
	at soot.AbstractASMBackend.generateAnnotations(AbstractASMBackend.java:521)
	at soot.AbstractASMBackend.generateMethods(AbstractASMBackend.java:355)
	at soot.AbstractASMBackend.generateByteCode(AbstractASMBackend.java:273)
	at soot.AbstractASMBackend.generateClassFile(AbstractASMBackend.java:224)
	at soot.PackManager.writeClass(PackManager.java:1141)
	at soot.PackManager.lambda$writeOutput$1(PackManager.java:699)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
	at java.base/java.lang.Thread.run(Thread.java:829)

Here's the fat jar I created from the project:

javapoet-1.14.0-SNAPSHOT-fat-tests.zip

This is not the first time that I am seeing issues related to SymbolTable. When I was trying to perform slicing on the commons-lang library I got similar errors during instrumentation. This is really a problem because I need to benchmark at least 10 projects for my Master's thesis and so far Slicer4J managed to work with 3 of over 20 open source projects I tried.

I would be really happy if you could look into this issue. Thank you.

This is a soot issue, fixed by updating to the latest soot build. I can now create the instrumented JAR. Please pull and re-build both DynamicSlicingCore and this repo.

Thank you for the fix but unfortunately I get another problem when instrumenting the Jar. This is the output of instr-debug.log:

EDIT: I just saw, I actually do get an instrumented jar, despite the error. I nevertheless want to report the error

[main] INFO JimpleWriter - initialize (17): Initializing Instrumenter
[main] INFO JimpleWriter - initialize (29): Initialization done
[main] INFO JimpleWriter - start (36): Running packs ... 
[main] INFO JimpleWriter - start (38): Writing output ... 
[main] INFO JimpleWriter - start (40): Output written ... 
[main] INFO JavaInstrumenter - initialize (79): Initializing Instrumenter
[main] INFO JavaInstrumenter - initialize (98): Initialization done
[main] INFO JavaInstrumenter - start (252): Running packs ... 
[Thread-28] ERROR heros.solver.CountingThreadPoolExecutor - Worker thread execution failed: Failed to apply jb to <net.bytebuddy.implementation.bytecode.constant.FieldConstant: net.bytebuddy.implementation.bytecode.StackManipulation$Size apply(net.bytebuddy.jar.asm.MethodVisitor,net.bytebuddy.implementation.Implementation$Context)>
java.lang.RuntimeException: Failed to apply jb to <net.bytebuddy.implementation.bytecode.constant.FieldConstant: net.bytebuddy.implementation.bytecode.StackManipulation$Size apply(net.bytebuddy.jar.asm.MethodVisitor,net.bytebuddy.implementation.Implementation$Context)>
	at soot.asm.AsmMethodSource.getBody(AsmMethodSource.java:2238)
	at soot.SootMethod.retrieveActiveBody(SootMethod.java:446)
	at soot.PackManager.lambda$retrieveAllBodies$2(PackManager.java:1252)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
	at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: java.lang.ClassCastException: class java.util.LinkedHashMap$Entry cannot be cast to class java.util.HashMap$TreeNode (java.util.LinkedHashMap$Entry and java.util.HashMap$TreeNode are in module java.base of loader 'bootstrap')
	at java.base/java.util.HashMap$TreeNode.moveRootToFront(HashMap.java:1882)
	at java.base/java.util.HashMap$TreeNode.treeify(HashMap.java:1998)
	at java.base/java.util.HashMap.treeifyBin(HashMap.java:767)
	at java.base/java.util.HashMap.putVal(HashMap.java:639)
	at java.base/java.util.HashMap.put(HashMap.java:607)
	at com.google.common.collect.StandardTable.getOrCreate(StandardTable.java:137)
	at com.google.common.collect.StandardTable.put(StandardTable.java:148)
	at com.google.common.collect.HashBasedTable.put(HashBasedTable.java:51)
	at soot.FastHierarchy.resolveMethod(FastHierarchy.java:807)
	at soot.FastHierarchy.resolveMethod(FastHierarchy.java:760)
	at soot.SootMethodRefImpl.tryResolve(SootMethodRefImpl.java:216)
	at soot.SootMethodRefImpl.tryResolve(SootMethodRefImpl.java:202)
	at soot.toolkits.exceptions.UnitThrowAnalysis.mightThrow(UnitThrowAnalysis.java:304)
	at soot.toolkits.exceptions.UnitThrowAnalysis$ValueSwitch.caseInstanceInvokeExpr(UnitThrowAnalysis.java:1181)
	at soot.toolkits.exceptions.UnitThrowAnalysis$ValueSwitch.caseSpecialInvokeExpr(UnitThrowAnalysis.java:1003)
	at soot.jimple.internal.AbstractSpecialInvokeExpr.apply(AbstractSpecialInvokeExpr.java:117)
	at soot.toolkits.exceptions.UnitThrowAnalysis.mightThrow(UnitThrowAnalysis.java:296)
	at soot.toolkits.exceptions.UnitThrowAnalysis$UnitSwitch.caseInvokeStmt(UnitThrowAnalysis.java:802)
	at soot.jimple.internal.JInvokeStmt.apply(JInvokeStmt.java:99)
	at soot.toolkits.exceptions.UnitThrowAnalysis.mightThrow(UnitThrowAnalysis.java:280)
	at soot.toolkits.exceptions.UnitThrowAnalysis.mightThrow(UnitThrowAnalysis.java:275)
	at soot.toolkits.graph.ExceptionalUnitGraph.buildExceptionDests(ExceptionalUnitGraph.java:277)
	at soot.toolkits.graph.ExceptionalUnitGraph.initialize(ExceptionalUnitGraph.java:220)
	at soot.toolkits.graph.ExceptionalUnitGraph.<init>(ExceptionalUnitGraph.java:127)
	at soot.jimple.toolkits.scalar.UnreachableCodeEliminator.internalTransform(UnreachableCodeEliminator.java:86)
	at soot.BodyTransformer.transform(BodyTransformer.java:47)
	at soot.Transform.apply(Transform.java:126)
	at soot.JimpleBodyPack.applyPhaseOptions(JimpleBodyPack.java:64)
	at soot.JimpleBodyPack.internalApply(JimpleBodyPack.java:112)
	at soot.Pack.apply(Pack.java:126)
	at soot.asm.AsmMethodSource.getBody(AsmMethodSource.java:2236)
	... 5 more
Exception in thread "Thread-28" java.lang.RuntimeException: Failed to apply jb to <net.bytebuddy.implementation.bytecode.constant.FieldConstant: net.bytebuddy.implementation.bytecode.StackManipulation$Size apply(net.bytebuddy.jar.asm.MethodVisitor,net.bytebuddy.implementation.Implementation$Context)>
	at soot.asm.AsmMethodSource.getBody(AsmMethodSource.java:2238)
	at soot.SootMethod.retrieveActiveBody(SootMethod.java:446)
	at soot.PackManager.lambda$retrieveAllBodies$2(PackManager.java:1252)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
	at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: java.lang.ClassCastException: class java.util.LinkedHashMap$Entry cannot be cast to class java.util.HashMap$TreeNode (java.util.LinkedHashMap$Entry and java.util.HashMap$TreeNode are in module java.base of loader 'bootstrap')
	at java.base/java.util.HashMap$TreeNode.moveRootToFront(HashMap.java:1882)
	at java.base/java.util.HashMap$TreeNode.treeify(HashMap.java:1998)
	at java.base/java.util.HashMap.treeifyBin(HashMap.java:767)
	at java.base/java.util.HashMap.putVal(HashMap.java:639)
	at java.base/java.util.HashMap.put(HashMap.java:607)
	at com.google.common.collect.StandardTable.getOrCreate(StandardTable.java:137)
	at com.google.common.collect.StandardTable.put(StandardTable.java:148)
	at com.google.common.collect.HashBasedTable.put(HashBasedTable.java:51)
	at soot.FastHierarchy.resolveMethod(FastHierarchy.java:807)
	at soot.FastHierarchy.resolveMethod(FastHierarchy.java:760)
	at soot.SootMethodRefImpl.tryResolve(SootMethodRefImpl.java:216)
	at soot.SootMethodRefImpl.tryResolve(SootMethodRefImpl.java:202)
	at soot.toolkits.exceptions.UnitThrowAnalysis.mightThrow(UnitThrowAnalysis.java:304)
	at soot.toolkits.exceptions.UnitThrowAnalysis$ValueSwitch.caseInstanceInvokeExpr(UnitThrowAnalysis.java:1181)
	at soot.toolkits.exceptions.UnitThrowAnalysis$ValueSwitch.caseSpecialInvokeExpr(UnitThrowAnalysis.java:1003)
	at soot.jimple.internal.AbstractSpecialInvokeExpr.apply(AbstractSpecialInvokeExpr.java:117)
	at soot.toolkits.exceptions.UnitThrowAnalysis.mightThrow(UnitThrowAnalysis.java:296)
	at soot.toolkits.exceptions.UnitThrowAnalysis$UnitSwitch.caseInvokeStmt(UnitThrowAnalysis.java:802)
	at soot.jimple.internal.JInvokeStmt.apply(JInvokeStmt.java:99)
	at soot.toolkits.exceptions.UnitThrowAnalysis.mightThrow(UnitThrowAnalysis.java:280)
	at soot.toolkits.exceptions.UnitThrowAnalysis.mightThrow(UnitThrowAnalysis.java:275)
	at soot.toolkits.graph.ExceptionalUnitGraph.buildExceptionDests(ExceptionalUnitGraph.java:277)
	at soot.toolkits.graph.ExceptionalUnitGraph.initialize(ExceptionalUnitGraph.java:220)
	at soot.toolkits.graph.ExceptionalUnitGraph.<init>(ExceptionalUnitGraph.java:127)
	at soot.jimple.toolkits.scalar.UnreachableCodeEliminator.internalTransform(UnreachableCodeEliminator.java:86)
	at soot.BodyTransformer.transform(BodyTransformer.java:47)
	at soot.Transform.apply(Transform.java:126)
	at soot.JimpleBodyPack.applyPhaseOptions(JimpleBodyPack.java:64)
	at soot.JimpleBodyPack.internalApply(JimpleBodyPack.java:112)
	at soot.Pack.apply(Pack.java:126)
	at soot.asm.AsmMethodSource.getBody(AsmMethodSource.java:2236)
	... 5 more
Exception in thread "main" java.lang.RuntimeException: Failed to apply jb to <net.bytebuddy.implementation.bytecode.constant.FieldConstant: net.bytebuddy.implementation.bytecode.StackManipulation$Size apply(net.bytebuddy.jar.asm.MethodVisitor,net.bytebuddy.implementation.Implementation$Context)>
	at soot.asm.AsmMethodSource.getBody(AsmMethodSource.java:2238)
	at soot.SootMethod.retrieveActiveBody(SootMethod.java:446)
	at soot.PackManager.lambda$retrieveAllBodies$2(PackManager.java:1252)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
	at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: java.lang.ClassCastException: class java.util.LinkedHashMap$Entry cannot be cast to class java.util.HashMap$TreeNode (java.util.LinkedHashMap$Entry and java.util.HashMap$TreeNode are in module java.base of loader 'bootstrap')
	at java.base/java.util.HashMap$TreeNode.moveRootToFront(HashMap.java:1882)
	at java.base/java.util.HashMap$TreeNode.treeify(HashMap.java:1998)
	at java.base/java.util.HashMap.treeifyBin(HashMap.java:767)
	at java.base/java.util.HashMap.putVal(HashMap.java:639)
	at java.base/java.util.HashMap.put(HashMap.java:607)
	at com.google.common.collect.StandardTable.getOrCreate(StandardTable.java:137)
	at com.google.common.collect.StandardTable.put(StandardTable.java:148)
	at com.google.common.collect.HashBasedTable.put(HashBasedTable.java:51)
	at soot.FastHierarchy.resolveMethod(FastHierarchy.java:807)
	at soot.FastHierarchy.resolveMethod(FastHierarchy.java:760)
	at soot.SootMethodRefImpl.tryResolve(SootMethodRefImpl.java:216)
	at soot.SootMethodRefImpl.tryResolve(SootMethodRefImpl.java:202)
	at soot.toolkits.exceptions.UnitThrowAnalysis.mightThrow(UnitThrowAnalysis.java:304)
	at soot.toolkits.exceptions.UnitThrowAnalysis$ValueSwitch.caseInstanceInvokeExpr(UnitThrowAnalysis.java:1181)
	at soot.toolkits.exceptions.UnitThrowAnalysis$ValueSwitch.caseSpecialInvokeExpr(UnitThrowAnalysis.java:1003)
	at soot.jimple.internal.AbstractSpecialInvokeExpr.apply(AbstractSpecialInvokeExpr.java:117)
	at soot.toolkits.exceptions.UnitThrowAnalysis.mightThrow(UnitThrowAnalysis.java:296)
	at soot.toolkits.exceptions.UnitThrowAnalysis$UnitSwitch.caseInvokeStmt(UnitThrowAnalysis.java:802)
	at soot.jimple.internal.JInvokeStmt.apply(JInvokeStmt.java:99)
	at soot.toolkits.exceptions.UnitThrowAnalysis.mightThrow(UnitThrowAnalysis.java:280)
	at soot.toolkits.exceptions.UnitThrowAnalysis.mightThrow(UnitThrowAnalysis.java:275)
	at soot.toolkits.graph.ExceptionalUnitGraph.buildExceptionDests(ExceptionalUnitGraph.java:277)
	at soot.toolkits.graph.ExceptionalUnitGraph.initialize(ExceptionalUnitGraph.java:220)
	at soot.toolkits.graph.ExceptionalUnitGraph.<init>(ExceptionalUnitGraph.java:127)
	at soot.jimple.toolkits.scalar.UnreachableCodeEliminator.internalTransform(UnreachableCodeEliminator.java:86)
	at soot.BodyTransformer.transform(BodyTransformer.java:47)
	at soot.Transform.apply(Transform.java:126)
	at soot.JimpleBodyPack.applyPhaseOptions(JimpleBodyPack.java:64)
	at soot.JimpleBodyPack.internalApply(JimpleBodyPack.java:112)
	at soot.Pack.apply(Pack.java:126)
	at soot.asm.AsmMethodSource.getBody(AsmMethodSource.java:2236)
	... 5 more

I pulled, cleaned and re-built both, Core and Slicer4J

I do not get this error, however, it seems like disabling soot's unreachable code optimization may work. I'll try that and update the code and let you know.