>>-showpdf--+--------+--+--------------+--+----------------+--+-------+->< '-pdfdir-' '- -f--pdfname-' '- -m--pdfmapdir-' '- -xml-'
静的情報を格納する PDF マップ・ファイルは、-qpdf1 フェーズ中に生成されます。これに対して PDF ファイルは、結果として生成されたアプリケーションの実行中に生成されます。 showpdf ユーティリティーでは、PDF 情報をテキストと XML のいずれかのフォーマットで表示するために、PDF ファイルと PDF マップ・ファイルの両方を必要とします。
-qpdf1 フェーズで -qpdf1=level=2 オプションを指定した場合、複数の PDF ファイルおよび PDF マップ・ファイルが生成されることがあります。この場合は、プロファイル情報を表示するときに、PDF ファイルと PDF マップ・ファイルのペアごとに showpdf ユーティリティーを実行する必要があります。
デフォルトでは、PDF ファイルには ._pdf という名前が付けられ、PDF マップ・ファイルには ._pdf_map という名前が付けられます。PDFDIR 環境変数が設定されている場合、PDF ファイルおよび PDF マップ・ファイルは、コンパイラーによって PDFDIR で指定されたディレクトリーに配置されます。PDFDIR 環境変数を設定しなかった場合、 コンパイラーはこれらのファイルを現行作業ディレクトリーに格納します。 PDFDIR 環境変数を設定した場合に、指定したディレクトリーが存在しないと、コンパイラーから警告メッセージが出されます。 デフォルト値をオーバーライドするには、 -qpdf1=pdfname オプションを使用して、PDF ファイルおよび PDF マップ・ファイルのパスと名前を指定します。例えば、 -qpdf1=pdfname=/home/joe/func オプションを指定すると、 結果の PDF ファイルの名前は func となり、 PDF マップ・ファイルの名前は func_map となります。どちらのファイルも、 /home/joe ディレクトリーに格納されます。
-qpdf1 フェーズの後、結果のアプリケーションの実行前に PDFDIR 環境変数を変更した場合、PDF ファイルと PDF マップ・ファイルが別々のディレクトリー内に生成されます。 この場合は、この両方のファイルのディレクトリーを showpdf ユーティリティーに指定する必要があります。
以下の例では、showpdf ユーティリティーを使用して、「Hello World」アプリケーションのプロファイル情報を表示する方法を示しています。
#include <stdio.h>
void HelloWorld()
{
printf("Hello World");
}
main()
{
HelloWorld();
return 0;
}
xlc -qpdf1 -O hello.c
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 )
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>