I'm attempting to profile a C++ DLL on Vista/x64. I am building the DLL optimized, with debug information enabled. However, when I attempt to run a Call Graph activity in VTune 9.0, only "exports instrumentation" is performed.
If I right-click on the activity and select "Modify Collectors", I can see my DLL listed, with a "Yes" in the "Debug Info" column.
However, the "Module Type" value says "System", and this is apparently preventing me from selecting "All Functions" instrumentation.
Our project also supports x86 platforms; when my colleagues running on Vista/x86 bring up the "Modify Collectors" dialog, the DLL of interest is listed as being a "User DLL".
What causes VTune to decide a module is "System" and not "User"?
VTune instrumentation engine decides a module is system if its preferred base address belongs to system address range.
Right now it supports singe system address range and it is defined as 0x60000000 7FFFFFFF
FFFFFFFF for x64. Probably while linking your image you've changed default base address.
Many thanks! I have been able to get function-level profiling going by setting "Linker->Advanced->Base Address" to 0x00000000_20000000 in Visual Studio and creating a new activity in VTune. (I tried deleting VTune's cache, but it still remembered my DLL as being a "System" DLL. Exiting VTune, re-launching it and creating the new activity seemed to make VTune forget its earlier analysis.)
Also, I think we areusing the default VS linker settings (there is no /BASE directive in the command line, although there is a /SUBSYSTEM:WINDOWS). When I used LINK.EXE to inspectourDLL, the base address was given as 0x00000001_80000000, which would map to the "system" range according to your numbers. This is with VS2005 version 8.0.50727.867 (vsvista.050727-8600).
Again, thanks for solving this.