From: Erik E. <er...@el...> - 2010-10-07 21:53:40
|
Hi, I can not find any way to analyze the callgraph more than one level at-a-time, e.g. consider the following pseudocode: main() { hlfunc1(); hlfunc2(); } hlfunc1() { for (i = 0 .. bigvalue) { mlfunc(1); } } hlfunc2() { for (i = 0 .. bigvalue) { mlfunc(2); } } mlfunc(int f) { switch (f) { case 1: llfunc1(); break; case 2: llfunc2(); break; } } llfunc1() { // calculations... } llfunc2() { // other calculations } I would like to be able to see that llfunc2() was caused by hlfunc2(), with the opreport tool it *seems* I can only see that llfunc1() was called from mlfunc() and mlfunc() was called an fairly equal number of times from both hlfunc1() and hlfunc2(). I have configured the stackdepth of oprofile to very high values, but I can't seem to find any analysis options to show me this sort of information, is it possible to get all the recorded callstacks in some way? preferably with the address->symbol resolution already done? As an added complexity, I am inserting fake stackframes and using the jit API as large parts of our logic is written in an interpreted bytecode, this works in the sense that I can see our interpreter function called from our bytecode functions, but because of the previous issue I can only see one level "up". (there will never be a sample taken when the IP is inside the bytecode of course, only when the current stackframe points back to the bytecode). Am I looking for something that will not be possible? Regards Erik |