[DiSL-user] Problems using custom Transformers

Lubomír Bulej lubomir.bulej at d3s.mff.cuni.cz
Thu Apr 20 14:06:07 CEST 2017


Dear Alessio,

please let me know what version of DiSL are you using, and if it's not trunk,
could you try if the problem is still there in the trunk version? I'll try to
find time to look at the code this evening...


Best regards,
Lubomir


On 20/04/17 12:13, Alessio Gambi wrote:
> Dear DiSL-ers
> 
> I am having troubles in making my custom implementation working with DiSL.
> 
> So far I got to the following point:
> 
> - Implemented Transformer interface
> 
> - Triggered custom transformation
> 
> - NPE (see [1]) when the transformation is applied.
> 
> 
> 
> I rooted the problem in the following code (DiSL.java) ~ line 440/450 (I
> introduced few printouts): 
> 
> public synchronized byte[] instrument(final byte[] originalBytes) throws
> DiSLException {
> 
> ...
> 
> //
> // Instrument the class. If the class is modified neither by DiSL,
> // nor by any of the transformers, bail out early and return NULL
> // to indicate that the class has not been modified in any way.
> //
> final InstrumentedClass instResult = instrumentClass(inputCN);
> if(instResult== null&& transformedBytes== originalBytes) {
> returnnull;
> }
> 
> 
> In my case, I get the following condition: "instResult == null” BUT
> "transformedBytes *!=* originalBytes”,
> so the if statement does not trigger and later in the same method there’s an
> access to instResult which raise the NullPointerException
> 
> final ClassNode instCN = instResult.classNode;
> 
> 
> I am digging a bit into the code to understand why instResult is null, but in
> the meanwhile you might suggest something as well.
> 
> Best
> 
> — Alessio
> 
> [1] Console output:
> 
>      [exec] de.unisaarland.instrumentation: Info: Transforming mainP/Main
>      [exec] de.unisaarland.instrumentation: DependencyTrackingClassVisitor.visit()
>      [exec] de.unisaarland.instrumentation: Adding interface
> DependencyInstrumented to mainP/Main null java/lang/Object
>      [exec] dislserver: error instrumenting mainP/Main:
> java.lang.NullPointerException
>      [exec] at ch.usi.dag.disl.DiSL.instrument(DiSL.java:450)
>      [exec] at
> ch.usi.dag.dislserver.RequestProcessor.process(RequestProcessor.java:71)
>      [exec] at
> ch.usi.dag.dislserver.DiSLServer$ConnectionHandler.run(DiSLServer.java:99)
>      [exec] at
> java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
>      [exec] at java.util.concurrent.FutureTask.run(FutureTask.java:266)
>      [exec] at
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
>      [exec] at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
>      [exec] at java.lang.Thread.run(Thread.java:745)
>      [exec] 
>      [exec] DiSL-agent error: instrumentation server error:
>      [exec] error instrumenting mainP/Main: java.lang.NullPointerException
>      [exec] at ch.usi.dag.disl.DiSL.instrument(DiSL.java:450)
>      [exec] at
> ch.usi.dag.dislserver.RequestProcessor.process(RequestProcessor.java:71)
>      [exec] at
> ch.usi.dag.dislserver.DiSLServer$ConnectionHandler.run(DiSLServer.java:99)
>      [exec] at
> java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
>      [exec] at java.util.concurrent.FutureTask.run(FutureTask.java:266)
>      [exec] at
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
>      [exec] at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
>      [exec] at java.lang.Thread.run(Thread.java:745)
>      [exec] 
>      [exec] dislreserver: fatal error: java.io.EOFException
>      [exec] at java.io.DataInputStream.readByte(DataInputStream.java:267)
>      [exec] at
> ch.usi.dag.dislreserver.DiSLREServer.processRequests(DiSLREServer.java:105)
>      [exec] at ch.usi.dag.dislreserver.DiSLREServer.run(DiSLREServer.java:76)
>      [exec] at ch.usi.dag.dislreserver.DiSLREServer.main(DiSLREServer.java:58)
>      [exec] 
>      [exec] de.unisaarland.instrumentation: Info: Done with mainP/Main
>      [exec] disl: Original class transformed
>      [exec] disl: InstrumentedClass  : null
> Alessio Gambi, Ph.D.
> gambi at st.cs.uni-saarland.de <mailto:gambi at st.cs.uni-saarland.de>
> 
> 




More information about the Disl-user mailing list