From: Eliot M. <mo...@cs...> - 2012-11-15 11:58:18
|
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. 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? Regards -- Eliot Moss |