§2 トレース 1 vb2005 | プログラミング実習 [Menu] | |
コンピューターのプログラムが実行されていく過程で、実行される順を追跡したり、変数の値の変化を調べることをトレースという。ここでは、トレースの方法について学習する。
【1】 人間がトレースする方法
トレースのサンプルとして、フォームにボタン(Button1)とラベル(Label1)オブジェクトを1つずつ配置し、次のプログラムを入力したとする。
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim n As Integer, goukei As Integer '#0
For n = 1 To 5 '#1
goukei = goukei + n '#2
Next '#3
Label1.Text = "結果は、" & goukei & " です。" '#4
End Sub
For 変数 = 始値 To 終値 [Step 増分] 〜 Next ForとNextの間を繰り返す命令である。変数 は制御変数と呼ばれ繰り返し回数を監視する。この変数 が始値 から終値 になるまで繰り返す。繰り返すごとに変数 は1ずつ増加する。
[ ] 内のStep 増分 は繰り返すごとに変数 を増加させる値であるが、省略することができる。省略した場合の増分 は1となる。
プログラムの「For n = 1 To 5 〜 Next」は"Step 増分"を省略した書き方である。したがって、増分は1となる。繰り返すごとに変数nの値が1,2,3,4,5と変化するので5回繰り返すことになる。
「Label1.Text = "結果は、" & goukei & " です。"」の"&"は、文字を連結する演算子である。今、変数goukeiが15のとき、"結果は、" と 15 と " です。"の3つの文字が連結されて、"結果は、15 です。"という1つの文字になり、Label1.Textに格納される。
○ トレース
このプログラムを見ながらトレースする。各行に#0〜#4の通し番号を付け、どの行を実行しているかわかるようにしている。#0行は変数の宣言だけで数値型の変数は0で初期化される。
次の表は、実行される順を追いながら、各行が実行されたあとの変数の値を記録したものである。空欄を埋めよ。
トレースによって最終的に変数goukeiの値は15になり、ラベル(Label1)に表示されることがわかる。また、このプログラムは「1から5までの和を計算する」ものであることもわかる。
ただし、この方法では限界がある。例えば、"For n = 1 To 1000"の場合、変数の値の変化を記録していくことは難しい。しかし、ある程度トレースすれば何をするプログラムかわかってくることもある。
【2】 トレースのための命令を追加する方法
トレースする過程で知りたい情報の多くの場合、変数の値である。変数の値を表示する命令があれば、その命令を使って表示させる。ただし、トレースが完了した後には削除する必要がある。
VBには、メッセージを表示するためにMsgBoxという命令がある。
MsgBox(値 ) ダイアログ(別のウィンドウ)を開き、値 をメッセージとして表示する。
他にもいろいろな動作をさせることができる。詳しくはヘルプを参照のこと。
プログラムの実行順はわかるが、実行中の変数の値をトレースしたいときなどに利用できる。
同じ「1から5までの和を計算する」プログラムを使ってトレースする。調べる変数はnとgoukeiとし、メッセージ(変数の値)を表示する命令を合計計算の後に追加する。
新しいプロジェクトを「トレース」という名前で作成する。フォームにボタン(Button1)とラベル(Label1)オブジェクトを1つずつ配置し、次のプログラムを入力する。
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim n As Integer, goukei As Integer
For n = 1 To 5
goukei = goukei + n
MsgBox("n=" & n & " goukei=" & goukei)
Next
Label1.Text = "結果は、" & goukei & " です。"
End Sub
実行してボタン(Button1)をクリックすると、実行中の変数の値がメッセージボックスに表示される。
[OK]ボタンをクリックすると順に表示される。
サンプルでは、繰り返し回数が5回であるので、メッセージが表示されるたびに[OK]ボタンをクリックしてもそれほど手間ではない。しかし、1から1000までの和を計算するプログラムで、800回目(n=800)の変数goukeiの値を調べたいとき、800回もクリックすることは困難である。このようなときは、If文とあわせて使用すると良い。
例
If n = 800 Then
MsgBox("n=" & n & " goukei=" & goukei)
End If
○ デバッグ用の命令
デバッグとは、プログラムの間違い(バグという)を取り除くことである。VBには、バグを探すための命令が用意されている。
Debug.Prin(値 ) 値 をイミディエイト ウィンドウに表示する。
MsgBox命令をDebug.Printに書き換える。
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim n As Integer, goukei As Integer
For n = 1 To 5
goukei = goukei + n
Debug.Print("n=" & n & " goukei=" & goukei)
Next
Label1.Text = "結果は、" & goukei & " です。"
End Sub
n=1 goukei=1
n=2 goukei=3 n=3 goukei=6 n=4 goukei=10 n=5 goukei=15 |
実行してボタン(Button1)をクリックすると、実行中の変数の値が右のように、イミディエイト ウィンドウに一度に表示される。
イミディエイト ウィンドウは、VBウィンドウの下部に表示される。
デバッグ中、すなわちプログラムをデバッグ開始で実行させると、Debug.Print命令のコードが生成される。プログラムが完成して、製品版として実行ファイルをビルドするときには、Debug.Print命令のコードが生成されない。
§2 トレース 1 vb2005 | Copyright©2007 Hiroshi Masuda |