プロファイラ(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. |