Hi Martin, Thanks first for your suggestion and ideas. TPTP Java profiler instruments target classes for profile event generation which is transferred back to Eclipse client with the help of Agent Controller. Events are presented in both textual and graphical ways. Optional profile to file function is available for direct saving of events. These are very close to what you have suggested in your email. TPTP does not currently support line level coverage with JVM 1.6 and above. In pervious release of TPTP where code coverage was supported, it is proven that test code coverage is a very good usage of combining the TPTP Test and Profiling functionality. Profiling 'breakpoint' was raised but it was not further discussed and planned due to the lack of resources in the project. As an open source project, TPTP welcomes community feedback and contribution. Most of your idea are already implemented in existing TPTP release and I suggest you to give it a try. Please let me know if you have any more question or discussion on your idea.
Detail of the project and technology used are available in TPTP webpage here [1]. [1] http://www.eclipse.org/tptp/platform/documents/design/arch_tptp_platform.php Regards, ___________________________________________ Eugene Chan IBM Canada Lab, Canada From: Martin Hare Robertson <mch...@googlemail.com> To: tptp-tracing-profiling-tools-dev@eclipse.org Date: 02/22/2010 05:05 PM Subject: [tptp-tracing-profiling-tools-dev] Trace Development Ideas Sent by: tptp-tracing-profiling-tools-dev-boun...@eclipse.org Hi, I am a Java developer who uses Eclipse every day in my job. I am interested in contributing towards the development of some interesting new features which I think would fit into the TPTP project. However, I would like to get some feedback to help me improve my ideas before I take this any further. The two technologies which I have been playing with are the Java Instrumentation API and ASM2 Bytecode processing library. * http://java.sun.com/javase/6/docs/api/java/lang/instrument/package-summary.html * http://asm.ow2.org/ My ideas are all in the area of execution trace recording/processing. _Recording _Using a combination of the Java Instrumentation API and ASM2 an Agent can be used to rewrite class files to capture data about the code which is executed. This should be stored as efficiently as possible in memory and streamed to disk as the amount of data becomes too large. I have implemented a basic prototype Agent that instruments Classfiles to write trace output to a text file to show which lines of code were executed. Here is some example output. Added tracing to: gb.trace.test.TraceExample No trace added to: gb.trace.agent.output.StdOutWriter Mon Jan 18 10:00:46 GMT 2010: Branch:TraceExample.java:workMethod:24 Mon Jan 18 10:00:46 GMT 2010: Branch:TraceExample.java:workMethod:31 Mon Jan 18 10:00:46 GMT 2010: Exit:TraceExample.java:workMethod:33 Mon Jan 18 10:00:47 GMT 2010: Branch:TraceExample.java:workMethod:24 Mon Jan 18 10:00:47 GMT 2010: Branch:TraceExample.java:workMethod:31 Mon Jan 18 10:00:47 GMT 2010: Exit:TraceExample.java:workMethod:33 I have enjoyed playing with the Java Instrumentation API and ASM2 as it feels like a very powerful thing to be able to rewrite Java class files at startup but also at runtime. _Processing_ In this section I will refer to a recording as an Execution Trace Recording (ETR). I have made up this term. There are a number of interesting things you could do with an ETR. _-- Textual Trace__ _Output a single line of text listing the timestamp and line number for each basic block (function, if/else etc) which was executed (See example above). _-- Graphical Trace _Sometimes when trying to work out how some code works I find myself stepping through the code to see which lines get hit. I could do this automatically by running a code coverage tool but I don't just want to know binary executed/not-executed information. I really want to know what lines were executed and in which order. At a simple level I would be happy with a list of function calls. It would be even better if I could drill down into each function call to see which lines were executed. It would also be good to be able to display the function calls of multiple threads side by side. This would be a difficult UI to make usable in situations with many threads. It may be sufficient to allow particular threads to be added to a multi thread comparison view. Another point is that I may only be interested in which parts of a function were executed for a particular invocation of a function. This would be really easy if I could start/stop the ETR recording while the target application is still running. The use case I am imaging is setting a break point part way through a JUnit test in Eclipse, pressing a "Start Recording" button while the test is suspended, resuming execution until another breakpoint is hit and pressing a "Stop recording" button while the test is once again suspended. This kind of runtime addition/removal of instrumentation is definitely possible with the Java Instrumentation API (within limits). _-- JUnit Integration _Runtime Class rewriting would allow a test to include arbitrary checks about whether particular bits of code were executed during a test. I am imagining an API along the lines of assertFunctionCalled("my.class.name","functionName"). This would be useful for automated integration tests of large blocks of code where a single return value could be returned as a result of multiple different execution paths within the code under test. _Summary_ These ideas are all pretty vague at this stage. I would love to hear some feedback on the following points. * Are these good ideas? * Do you know of any commercial/open source products implementing any of this? * Does TPTP already enable any of this? * Do these ideas fit into the current plans for TPTP? * Do you have any suggestions to improve these ideas? I look forward to hearing from you. Thanks MartinHR _______________________________________________ tptp-tracing-profiling-tools-dev mailing list tptp-tracing-profiling-tools-dev@eclipse.org https://dev.eclipse.org/mailman/listinfo/tptp-tracing-profiling-tools-dev
_______________________________________________ tptp-tracing-profiling-tools-dev mailing list tptp-tracing-profiling-tools-dev@eclipse.org https://dev.eclipse.org/mailman/listinfo/tptp-tracing-profiling-tools-dev