プロファイラ(prof)の使い方

Last Update: Jun.13,2001
LSI C-86 試食版」に付属の prof の使い方を説明します。要「C言語を始めよう!」です。(^_^;)

1. プロファイラ(prof)とは

簡単にいうと、プログラムのソースの各行が実行時に何回実行されたかの情報を取得・表示するツールです。数多く実行されている部分に着目して、効率をよくしたり、分岐やループなどが正しく実行されているかを調べたりするのに使われます。詳細は「LSI C-86 試食版」のユーザーズマニュアルの「第6章 プロファイラprof」の「6.1 プロファイラとは」をお読みください。

2. -p オプションを付けてコンパイル・実行

「C言語を始めよう!」を起動し、下記のソースを入力して、「test.c」として保存してください。

#include <stdio.h>

int main()
{
    int i, r = 0;
    for (i = 0; i < 10; i++)
    {
        r += i * i;
        printf("%d ", r);
    }
    putchar('\n');
    return 0;
}

「C言語を始めよう!」のメニュー「ビルド」→「LSI C-86 試食版 の設定」で「コンパイル オプションの設定」の「プロファイラコードを生成」にチェック-p オプション)をつけてからコンパイルし、コンパイルに成功したら実行します。

C:\WINDOWS\デスクトップ>TEST.exe
0 1 5 14 30 55 91 140 204 285

実行すると「test.c」を保存したディレクトリに「prof.out」というファイルが出来ます。

3. prof.exe の実行

「C言語を始めよう!」のメニュー「ビルド」→「コマンドを実行」を選択します。表示されるダイアログボックスで「prof」と入力して「OK」を押します。

デバッグウィンドウに実行結果が表示されます。左側の数字が実行回数です。

COMMAND.COM /C prof 
*** コマンド開始 ***
        #include <stdio.h>
        
      1 int main()
      1 {
      1 	int i, r = 0;
      1 	for (i = 0; i < 10; i++)
      1 	{
     10 		r += i * i;
     10 		printf("%d ", r);
     10 	}
      1 	putchar('\n');
      1 	return 0;
      1 }
*** コマンド終了 ***

正しく実行されているのが分かります。

4. ソースの誤りを見つける

次にわざと間違ったソースを入力します。

#include <stdio.h>

int main()
{
    int i, r = 0;
    for (i = 0; i < 10; i++);
    {
        r += i * i;
        printf("%d ", r);
    }
    putchar('\n');
    return 0;
}

どこがおかしいか分かりますか?とりあえず、上記と同様にコンパイル・実行して、「prof.out」を生成します。実行すると、「100」しか出力されません。

C:\WINDOWS\デスクトップ>TEST.exe
100

prof」を実行してみます。

COMMAND.COM /C prof 
*** コマンド開始 ***
        #include <stdio.h>
        
      1 int main()
      1 {
      1 	int i, r = 0;
      1 	for (i = 0; i < 10; i++);
      1 	{
      1 		r += i * i;
      1 		printf("%d ", r);
      1 	}
      1 	putchar('\n');
      1 	return 0;
      1 }
*** コマンド終了 ***

10回実行される筈の for 文のブロックが1回しか実行されていません。for 文のあたりを見ると、

for (i = 0; i < 10; i++); ← このセミコロンが犯人!

と見つけることが出来ました。このようなプログラムのミスは、コンパイラではエラーになりませんので、なかなか発見することが出来ません。プロファイラを使えば、容易にこのようなミスも見つけることが出来ます。


Back Copyright (c) 2001 AOK. All Rights Reserved.