§2 トレース 1 vb2005 プログラミング実習 [Menu]
 back next 

 コンピューターのプログラムが実行されていく過程で、実行される順を追跡したり、変数の値の変化を調べることをトレースという。ここでは、トレースの方法について学習する。

【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で初期化される。
 次の表は、実行される順を追いながら、各行が実行されたあとの変数の値を記録したものである。空欄を埋めよ。

変数 #0 #1 #2 #3 #1 #2 #3 #1 #2 #3 #1 #2 #3 #1 #2 #3 #1 #4
n 0 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 6 6
goukei 0 0 1 1 1 3 3 3

 トレースによって最終的に変数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命令のコードが生成されない。



 back next 
 §2 トレース 1 vb2005 Copyright©2007 Hiroshi Masuda 
inserted by FC2 system