GCC 的“-pg”如何?标记与分析器相关的工作?
我试图了解使用 GCC 编译 C 代码时 -pg
(或 -p
)标志如何工作。
GCC 官方文档仅声明:
<代码>-pg 生成额外的代码来编写适合分析程序 gprof 的配置文件信息。在编译您想要数据的源文件时必须使用此选项,并且在链接时也必须使用它。
这真的让我很感兴趣,因为我正在对分析器进行一些小研究。我正在尝试选择最适合这项工作的工具。
I'm trying to understand how the -pg
(or -p
) flag works when compiling C code with GCC.
The official GCC documentation only states:
-pg
Generate extra code to write profile information suitable for the analysis program gprof. You must use this option when compiling the source files you want data about, and you must also use it when linking.
This really interests me, as I'm doing a small research on profilers. I'm trying to pick the best tool for the job.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
使用 -pg 编译您的代码,以便Gprof 报告详细信息。请参阅 gprof 手册,9.1 分析实施:
请注意,使用这样的检测分析器,您将分析与在发布中编译的相同代码,而无需分析检测。检测代码本身会产生一定的开销。此外,检测代码可能会改变指令和数据缓存的使用。
与仪器分析器相反,采样分析器如 Intel VTune< /a> 通过使用操作系统中断定期查看目标程序的程序计数器来处理非检测代码。它还可以查询特殊的 CPU 寄存器,让您更深入地了解正在发生的情况。
另请参阅分析器检测与采样。
Compiling with -pg instruments your code, so that Gprof reports detailed information. See gprof's manual, 9.1 Implementation of Profiling:
Please note that with such an instrumenting profiler, you're profiling the same code you would compile in release without profiling instrumentation. There is an overhead associated with the instrumentation code itself. Also, the instrumentation code may alter instruction and data cache usage.
Contrary to an instrumenting profiler, a sampling profiler like Intel VTune works on noninstrumented code by looking at the target program's program counter at regular intervals using operating system interrupts. It can also query special CPU registers to give you even more insight of what's going on.
See also Profilers Instrumenting Vs Sampling.
此链接简要说明了 gprof 的工作原理。
此链接对其进行了广泛的批评。
(查看我对已存档问题的回答。)
This link gives a brief explanation of how gprof works.
This link gives an extensive critique of it.
(Check my answer to the archived question.)
来自“测量Ftrace 的函数持续时间":
From "Measuring Function Duration with Ftrace":