プロファイラ(prof)の使い方 |
Last Update: Jun.13,2001 |
| 「LSI C-86 試食版」に付属の prof の使い方を説明します。要「C言語を始めよう!」です。(^_^;) | |
簡単にいうと、プログラムのソースの各行が実行時に何回実行されたかの情報を取得・表示するツールです。数多く実行されている部分に着目して、効率をよくしたり、分岐やループなどが正しく実行されているかを調べたりするのに使われます。詳細は「LSI C-86 試食版」のユーザーズマニュアルの「第6章 プロファイラprof」の「6.1 プロファイラとは」をお読みください。
「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」というファイルが出来ます。
「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 }
*** コマンド終了 ***
|
正しく実行されているのが分かります。
次にわざと間違ったソースを入力します。
#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. |