应该为分析设置哪个编译选项?
我需要通过 VC++ 分析使用英特尔编译器编译的应用程序。 我正在使用 VTune 来分析我的代码。
我的理解是在发布模式下我不会有调试信息 这是分析器在调试模式下分析我的代码所必需的,结果 分析的内容将不相关。
我应该怎么办 ? 是否可以在发布模式下添加调试信息? 我该如何设置这个模式?
如果是这样,我仍然会受益于所有优化(内联等)吗?
I need to profile an application compiled with intel's compiler via VC++.
I'm using VTune to profile my code.
My understanding is that in release mode I won't have the debug information
that is necessary for the profiler to profile my code while in debug mode, the result
of the profiling will not be pertinent.
What should I do ? Is it possible to add debug info in release mode?
How can I set this mode?
If so, will I still benefit from all the optimization (inlining etc.)?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您当然应该在启用优化的情况下进行分析(编译器选项 /O3)。 /Zi 是用于启用调试信息的 Intel 编译器开关(在 Windows 上)。
由于优化,某些函数可能会因内联而从调试信息中丢失,但 VTune 会处理这个问题。
You should certainly profile with optimisations enabled (compiler option /O3). /Zi is the Intel compiler switch (on Windows) to enabled debugging information.
Because of the optimisations, some functions may be missing from the debugging information due to inlining, but VTune will cope with that.
即使在发布目标中,您也可以生成程序数据库文件(PDB)。 转到项目属性、链接器/调试并选中“生成程序数据库文件”选项。 它通常类似于“$(TargetDir)$(TargetName).pdb”。 现在,这取决于 VTune 是否知道如何解释 PDB 文件......
You can generate program database files (PDB) even in release target. Go to project properties, Linker/Debugging and check the option "Generate Program Database File". It is usually something like "$(TargetDir)$(TargetName).pdb". Now, it depends whether VTune knows how to interpret PDB files...
函数内联和进程间优化将使您的配置文件难以解释。 这就是为什么在调试和发布模式下进行分析是个好主意。 如果发布模式仅显示函数 foo 使用了 80% 的程序时间,则可以使用调试配置文件来查看内联到 foo 中的函数 bar 使用了 foo 的 60% 的时间。
Function inlining and interprocess optimizations will make your profile hard to interpret. That is why it is a good idea to profile in both debug and release modes. If release mode only shows function foo using 80% of the program time, you can use the debug profile to see that function bar, which was inlined into foo, is using 60% of foo's time.