gmon/gprof 性能分析
- 来源: https://www.freebasic.net/wiki/wikka.php?wakka=ProPgProfilingGmonGprof
- 最后更新: 2024-04-30
性能分析可用于分析应用程序的性能。
应用程序的性能可以通过函数被调用的次数、执行这些函数所花费的时间以及哪些函数在调用其他函数来衡量。这有助于识别可能执行时间过长或执行次数过多的函数,并考虑对其进行优化。
FreeBASIC 可以使用 GPROF 来分析应用程序的执行情况。性能分析信息在程序运行时收集,之后使用 GPROF 对收集到的数据进行报告。
性能分析程序的三个基本步骤:
GPROF 的完整文档可在此处获取:https://ftp.gnu.org/old-gnu/Manuals/gprof-2.9.1/html_mono/gprof.html。如果文档已从该位置移动,只需在网上搜索 "GNU GPROF" 即可找到相关链接。
FreeBASIC 支持函数分析;不支持基本块或逐行分析。
为性能分析准备程序(针对 gmon/gprof)
只有使用 -profile 或 -profgen gmon 命令行选项编译的代码才能进行此类分析。
向 FreeBASIC 编译器传递 -profile 或 -profgen gmon 选项以准备程序进行性能分析。
例如:
fbc program.bas -profile
or
fbc program.bas -profgen gmon这将告诉编译器在应用程序开始处以及每个函数开始处插入特殊的启动代码。
使用(gmon/gprof)分析程序
分析程序执行所需的信息在程序运行时收集。运行程序开始收集函数调用信息。该信息自动存储在程序所在目录中名为 gmon.out 的文件中。
分析程序输出
使用 GPROF 分析输出。GPROF 的默认报告包含每列值含义的说明。如果您是 GPROF 的新用户,可能想先运行默认报告并阅读说明。GPROF 的输出可以通过重定向保存到文件中。
将 GPROF 的输出保存到 profile.txt:
gprof program[.exe] > profile.txt只显示无说明的平面报告:
gprof program[.exe] --brief --flat-profile > profile.txt合并多次运行的结果
GPROF 还有一个 '--sum' 选项,可以方便地合并多次执行会话的结果。以下是使用示例:
- 运行一次程序,这将创建
gmon.out。 - 使用命令:
- 再次运行程序,这将在
gmon.out中创建新数据。 - 使用命令将
gmon.out中的新数据合并到gmon.sum: - 根据需要重复最后两个步骤。
- 使用命令分析汇总数据:
FreeBASIC 性能分析(gmon/gprof)内部机制
启用 '-profile' 选项后,程序中会添加一些代码。
- 在隐式 main 开始处调用
"_monstartup()"以初始化分析库。 - 在每个过程开始处调用
"mcount()"。这是分析库跟踪哪个函数正在执行以及由哪个其他函数调用的方式。 - 链接额外的程序启动目标代码(例如
gcrt?.o)。
分析库本身可能在单独的库中,也可能是 C 运行时库的一部分。
- mingw 需要
gcrt2.o和libgmon.a - cygwin 需要 gcrt0.o 和
libgmon.a - dos 需要
gcrt0.o(分析器代码在libc.a中) - linux 需要
gcrt1.o(分析器代码在libc.a中)
具体细节可能因 FreeBASIC 的不同移植版本而有所不同,但使用 FreeBASIC 进行 GPROF 分析的代码应与支持 GPROF 的其他语言兼容。
返回 程序员指南
返回 目录