rvprasad / dyco4j Goto Github PK
View Code? Open in Web Editor NEWInstrumentation based toolkit to collect dynamic information about JVM based code.
License: BSD 3-Clause "New" or "Revised" License
Instrumentation based toolkit to collect dynamic information about JVM based code.
License: BSD 3-Clause "New" or "Revised" License
When writing classes using a ClassWriter created with COMPUTE_FRAMES options (required for internals instrumentation), ASM looks for classes/interfaces inherited by instrumented classes. For this search to succeed, all classes required by instrumented classes should be available on the classpath of the instrumenter.
When the instrumentation injects an outermost exception handler in X(X s), the handler covers the super call. Since this variable is uninitialized before the super call and then initialized after the super call, there is a conflict in the frames that reach the handler; specifically, they differ in terms of flags (refer to section 4.10 of the Java Virtual Machine Specification, Java 8 Edition).
Here's an example to repro the issue. Compile it and run class X.
public class X extends Y {
public X(X s) {
super(new Y("as"));
}
public static void main(String[] s) { }
}
class Y {
Y(Object o) {}
}
This applies to both entry.CLI
and internals.CLI
.
Look at AbstractCLITest.groovy/LOGGING_LIBRARY
field. It would be best if the library info could be passed into the tests from Gradle.
Due to the bug 8172282 in JDK 8u112, the commit 45cef8e to fix issue #35 splits the outermost exception handler to not cover the call to the super class method. Once the JDK bug is fixed, address this issue by following the instructions for FIXME-1 in InitTracingMethodVisitor.java and make sure all tests pass; specifically, the ones in instrumentation:dyco4j/instrumentation/internals/CLIInitializerInstrumentationTest.groovy.
Make sure invokedynamic
invocations are also captured.
Currently, logs of two different call sites (for the same invoked method) in a method cannot be differentiated. So, associate a call site id to differentiate logs from different call sites in a method.
Instead of logging "tid,1,entry,m1", log "tid,entry,m1".
LoggerInitializer.initialize does not check if an instance of logger has been created. So, new logger in place of the current logger are created as each class is loaded.
Make sure externally dependencies is appropriately documented.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.