I have been quite satisfied with the profiling results generated by Intel Amplifier, but, unfortunately, I also make use of a programming language that the tool is not made for: Delphi.
I was trying some profiling tools targeted for Delphi, but none of them gave satisfactory results (no need to name them). I then decided to give Intel Amplifier a try with a Delphi program that was taking too long to save a project, but all I got back in the callstack was a memory address per method. I have the map file generated by Delphi in which I can look up which memory address belongs to which unit, method and line number, but the memory addresses reported by Intel Amplifier did not match. Adding or removing the base address 0x00401000 was of no use either. After some trial and error, I managed to find that I must add about 0x000CB160 to the memory address reported by Intel Amplifier in order to, almost, get to the proper line number reported in the map file. This way I managed to find the bottleneck and solve the issue, which is great and all, but I am still wondering: how do I know the proper value to add to the memory addresses reported by Intel Amplifier, so I can look them up in the map file? Is there any tool I can use for this purpose? Is it a known constant? Is it, perhaps, a bug in Intel Amplifier?