Yesterday, while I was visiting the VirtualDub website, I bumped into an interesting post about Frame Pointer Omission (FPO) optimization and why it renders perfect stack walking impossible when combined with callee-pops parameter passing.
Recalling my issues with stack walking in a profiling tool of Max McGuire (I couldn’t get credible call graphs out of it), I checked my settings and found that, indeed, FPO was enabled. I disabled it, and hey, suddenly it worked!
It’s a bit weird though, because I’m using
__cdecl which is caller-pops, plus I had full PDB information. So it should have worked even with FPO enabled.
Anyway, if you want to profile your app with call graph information, and you don’t get credible results, try disabling FPO.
Perhaps to be continued …