showpdf
用途
显示写入 PDF 和 PDF 映射文件的部分概要分析信息。 要使用此命令,必须首先使用 -qpdf1 选项编译程序。
语法
参数
- 人民之声
- 包含概要文件定向反馈 (PDF) 文件的目录。 如果在 PDF1 步骤之后未更改 PDFDIR 环境变量,那么 PDF 映射文件也包含在此目录中。 如果未指定此参数,那么编译器将使用 PDFDIR 环境变量的值作为该目录的名称。
- pdfname
- 是 PDF 文件的名称。 如果未指定此参数,那么编译器将使用
.<output_name>_pdf作为 缺省情况下PDF 文件的名称, 其中<output_name>是使用 -qpdf1编译程序时生成的输出文件的名称。 - pdfmapdir
- 包含 PDF 映射文件的目录。 如果未指定此参数,那么编译器将使用 PDFDIR 环境变量的值作为该目录的名称。
- -xml
- 确定 PDF 信息的显示格式。 如果指定了此参数,那么将以 XML 格式显示 PDF 信息; 否则,将以文本格式显示 PDF 信息。 因为值概要分析 和高速缓存未命中概要分析 信息只能以 XML 格式显示,所以 XML 格式的 PDF 报告包含的信息多于文本格式的报告。
使用量
包含静态信息的 PDF 映射文件是在 PDF1 步骤期间生成的, PDF 文件是在执行生成的应用程序期间生成的。 使用 showpdf 命令,您可以查看从应用程序收集的以下类型的概要分析信息:
- 块计数器概要分析
- 调用计数器概要分析
- 值概要分析
- 高速缓存不命中概要分析(如果在 PDF1 步骤中指定了 -qpdf1=level=2 选项)。
如果在 PDF1 步骤与执行生成的应用程序之间更改了 PDFDIR 环境变量,那么将在单独的目录中生成 PDF 和 PDF 映射文件。 在这种情况下,必须对 showpdf 命令指定这两个文件的目录。
您可以在 /opt/IBM/xlC/16.1.0/bin/中找到 showpdf 。
示例
以下示例显示如何使用 showpdf 命令来查看 Hello World 应用程序的概要分析信息。
程序文件
hello.c 的源如下所示:#include <stdio.h>
void HelloWorld()
{
printf("Hello World");
}
main()
{
HelloWorld();
return 0;
}
- 编译源文件。
xlc -qpdf1 -O hello.c - 使用典型数据集或多个典型数据集运行生成的可执行程序 a.out 。
- 如果要以文本格式查看可执行文件的概要分析信息,请运行不带任何参数的 showpdf 命令。
showpdf结果如下:HelloWorld(67): 1 (hello.c) Call Counters: 4 | 1 printf(69) Call coverage = 100% ( 1/1 ) Block Counters: 2-4 | 1 5 | 5 | 1 Block coverage = 100% ( 2/2 ) ----------------------------------- main(68): 1 (hello.c) Call Counters: 8 | 1 HelloWorld(67) Call coverage = 100% ( 1/1 ) Block Counters: 6-9 | 1 10 | Block coverage = 100% ( 1/1 ) Total Call coverage = 100% ( 2/2 ) Total Block coverage = 100% ( 3/3 )如果要以 XML 格式查看概要分析信息,请运行带有 -xml 参数的 showpdf 命令。
结果如下:showpdf -xml<?xml version="1.0" encoding="UTF-8" ?> - <XLTransformationReport xmlns="http://www.ibm.com/2010/04/CompilerTransformation" version="1.0"> - <CompilationStep name="showpdf"> - <ProgramHierarchy> - <FileList> - <File id="1" name="hello.c"> - <RegionList> <Region id="67" name="HelloWorld" startLineNumber="2" /> <Region id="68" name="main" startLineNumber="6" /> </RegionList> </File> </FileList> </ProgramHierarchy> <TransformationHierarchy /> - <ProfilingReports> - <BlockCounterList> - <BlockCounter regionId="67" execCount="1" coveredBlock="2" totalBlock="2"> - <BlockList> <Block index="3" execCount="1" startLineNumber="2" endLineNumber="4" /> <Block index="2" execCount="0" startLineNumber="5" endLineNumber="5" /> <Block index="4" execCount="1" startLineNumber="5" endLineNumber="5" /> </BlockList> </BlockCounter> - <BlockCounter regionId="68" execCount="1" coveredBlock="1" totalBlock="1"> - <BlockList> <Block index="3" execCount="1" startLineNumber="6" endLineNumber="9" /> <Block index="2" execCount="0" startLineNumber="10" endLineNumber="10" /> </BlockList> </BlockCounter> </BlockCounterList> - <CallCounterList> - <CallCounter regionId="67" execCount="1" coveredCall="0" totalCall="0"> - <CallList> <Call name="printf" execCount="1" lineNumber="4" /> </CallList> </CallCounter> - <CallCounter regionId="68" execCount="1" coveredCall="0" totalCall="0"> - <CallList> <Call name="HelloWorld" execCount="1" lineNumber="8" /> </CallList> </CallCounter> </CallCounterList> <ValueProfileList /> <CacheMissList /> </ProfilingReports> </CompilationStep> </XLTransformationReport>
