Profiling
 
分析可用于分析应用程序的性能。

应用程序的性能可以通过调用函数多少次,执行这些功能花费多少时间以及哪些函数调用其他函数来衡量。这可以帮助识别可能需要太长时间执行或执行太多次的功能,并且可能值得审查以进行优化。

FreeBASIC使用GPROF来分析应用程序的执行情况。在程序运行时收集分析器信息,然后使用GPROF报告收集的数据。

剖析程序的三个基本步骤是:
  • 1)通过使用-profile 选项编译源来准备用于概要分析的程序。
  • 2)将程序运行到收集信息(存储在gmon.out)。
  • 3)分析使用GPROF收集的信息。

有关GPROF的完整文档,请访问:http://www.gnu.org/software/binutils/manual/gprof-2.9.1/gprof.html.如果文档从该位置移动,只需在Web上搜索“GNU GPROF”,并返回相关链接。

FreeBASIC支持功能分析;不是基本块或逐行剖析。

准备一个程序进行分析

只能使用-profile 命令行选项编译的代码进行概要分析。将-profile 选项传递给FreeBASIC编译器,以准备要分析的程序。这将告诉编译器在应用程序的开头以及每个函数的开始处插入特殊的启动代码。
fbc program.bas -profile

分析计划

在程序运行时收集分析程序执行所需的信息。运行程序开始收集函数调用信息。该信息自动存储在与程序相同的目录中的名为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.
  • 使用命令:
mv gmon.out gmon.sum
or
rename gmon.out gmon.sum.
  • 再次运行你的程序这将在gmon.out中创建新数据。
  • 使用以下命令将gmon.out中的新数据合并到gmon.sum中:
gprof --sum program[.exe] gmon.out gmon.sum
  • 根据需要经常重复最后两个步骤。
  • 使用以下命令分析摘要数据:
gprof program[.exe] gmon.sum > profile.txt

FreeBASIC剖析内部

当启用“-profile”选项时,程序中会添加一位或多位代码。
  • 在隐式main的开头调用"_monstartup()"来初始化概要分析库。
  • 在每个过程开始时调用"mcount()".这是分析库如何跟踪正在进行的功能以及其他功能。
  • 连接附加程序启动对象代码。(e.g.gcrt?.o )

分析库本身可能位于单独的库或C运行时库的一部分中。
  • 明星将需要gcrt2.olibgmon.a
  • cygwin将需要gcrt0.o和libgmon.a
  • dos需要gcrt0.o(分析器代码位于libc.a
  • linux将需要gcrt1.o(分析器代码位于libc.a

从FreeBASIC的一个端口到下一个端口的细节可能会有所不同,但用FreeBASIC进行分析的源代码应该与支持GPROF的其他语言兼容。