From: Robin G. <rob...@gm...> - 2012-11-15 23:29:51
|
On 15/11/12 22:58, Eliot Moss wrote: > On 11/15/2012 5:29 AM, Shashank Gupta wrote: >> >> On Thu, Nov 15, 2012 at 8:40 AM, Eliot Moss <mo...@cs... <mailto:mo...@cs...>> wrote: >> >> On 11/14/2012 8:44 PM, Da Feng wrote: >> > Hi: >> > It's easier to do this with code inside bootImage, since the RVM.map has code locations. First, >> > break at sysStartMainThread, then after the image is mapped, break at any method entry address of >> > interest. >> >> But that works only for code compiled into the bootimage, >> not for random Java code loaded and compiled at run time. >> >> But here is another wondering -- if the original poster >> just wants to trace through some ordinary Java code, the >> Eclipse debugger is the right tool. >> >> As is often the case, we can frequently help better if >> we know more the context of what you are REALLY trying >> to accomplish overall and why you think you need to do >> this particular thing .... >> >> The main reason I wanted to print each instruction as it was being executed is because I wanted to >> get complete information of the execution of a java program, i.e., all memory addresses it is >> accessing and all registers it is accessing. >> >> The reason I want to do this inside JIKES (or any VM for that matter) is because other hardware >> monitors give such information of both JIKES and java program, while I want that information only >> for the java program. >> >> Also, another question, does the optimizing compiler have a mechanism to get such usage statistics >> about the program? If yes then how can I either add a new optimizing compiler or make changes to it ? > It is not easy to distinguish system from user program > execution. You could separate things according to whether > the PC value lies within the boot image, but that would > include user program execution of library routines that are > also used by the system. You could, using the maps produced > during boot image construction, distinguish between particular > methods, but still, that would not distinguish whether a > library routine is being executed on behalf of a user thread > or for some system action. Still, with some effort and > cleverness one might distinguish them, based on tracking > the call stack of each thread. If you write to Yi Lin, you can probably get hold of the code behind [1], which is the most comprehensive work on separating Jikes RVM from the mutator. It is certainly *possible* to run a tool like valgrind with Jikes RVM -- I have done it, and there is some information about how to do it in the web pages or wiki. I am wondering if that would help meet your need? Another possibility would be to use a hardware simulator like PTLsim, but valgrind would be an easier option if it serves your purpose. cheers, Robin [1] http://dx.doi.org/10.1145/2151024.2151048 |