首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >所需的编译标志,以便用户perf

所需的编译标志,以便用户perf
EN

Stack Overflow用户
提问于 2021-06-23 12:36:47
回答 1查看 698关注 0票数 0

我试图理解linux、perf热点,以理解c++应用程序的调用堆栈/跟踪。

程序是以调试模式还是以发布模式编译?假设我只有一个文件inline.cpp。我在其中一个示例中看到

代码语言:javascript
复制
g++ -O2 -g inline.cpp -o inline
perf record --call-graph dwarf ./inline

我想知道是否有必要用debug (-g)optimization -O2编写程序?编译可执行文件的标志是什么,以便使用perf记录运行?

如果我们使用out编译器标志编译程序,会有什么不同吗?

代码语言:javascript
复制
g++ inline.cpp -o inline
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-23 12:44:36

首先,-g-O2不是对立面。-g指定将生成调试符号,以便将热点与实际代码行相关联。-O2指定应该执行代码优化;这通常不是在您打算在调试器中运行的代码中完成的,因为它使跟踪执行变得更加困难。

分析器度量可执行文件的性能,而不是源代码的性能。如果您分析未优化的可执行文件,您将看到未优化的可执行文件的性能问题所在,但这些问题可能与优化的可执行文件中的问题不同。假设您关心优化的可执行文件的性能(因为这是用户通常运行的),那么您应该对此进行分析。-O2的使用肯定会使您更难理解性能问题所在,但这正是分析代码的本质。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68099966

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档