Development Environment    

変数の値のチェック

プログラムの実行を停止させれば、ワークスペースにカレントで記憶されている変数値を表示させることが可能となります。変数の値をチェックするには、つぎの方法を用いてください。

上記の方法のほとんどが、例題の中で変数の値を調べるで使用されています。

変数の値をどこでチェックするか   プログラムの実行を、ブレークポイント、または、ライン単位で停止させれば、変数の値を分析することが可能となります。コードを構成するある特定のラインが期待した結果を出力しているか確認したい場合、変数の値を調べてください。調べた結果が、期待通りのものとなっていれば、実行を続けるか、または、つぎのラインに実行を進めてください。逆に、調べた結果が期待通りでない場合、対象ライン、または、その前のラインにエラーが隠されているということになります。

たとえば、n = 1 の結果が正しければ、n = 2まで値をチェックする必要はありません。そのため、m = 1での collatzplot を構成するループの最初のイタレーションでは、実行を続けてください。ループの2回目の繰り返し(m = 2)で、collatzplot をライン10上で停止させれば、変数の値を調べることが可能となります。

ワークスペースの選択   コマンドウィンドウによって割り当てられた変数が、ベースワークスペースとなると考えてください。これに対して、それぞれの関数で生成された変数は、その変数自身のワークスペースをもつことになります。変数の値を分析するために、ユーザは先ずワークスペースを選択しなければなりません。プログラムを実行すると、カレントワークスペースがStack フィールドに表示されます。カレントで実行されている他の関数のワークスペースを構成する変数値を調べる場合、先ず、Stackフィールドのリストから対象となるワークスペースの選択を行ってください。

エディタ/デバッガ上にデータテップを表示   エディタ/デバッガ上でデータテップを表示させるには、カーソルを変数の左側に置いてください。カーソルを移動させるまで、カレントの変数値が表示されます。- これをデータテップ(Datatip)と言います。下図の例では、ファイル collatz n にカーソルが合わされ、データテップは、 n = 2であると表示しています。この結果から、変数の値が期待した通りの値になっていることが確認できます。なお、Stack フィールドが、カレント関数として、collatz の名を表示していることに注意してください。

コマンドウィンドウ上で変数値の表示   コマンドウィンドウ上で変数の名前をタイプすると、MATLABは、その変数のカレント値を表示します。ワークスペースにカレントで存在する変数を確認するには、関数whoを使用してください。たとえば、n の値を表示させるには、つぎのようにタイプします。

このとき、MATLAB は予想通り

を出力します。

配列エディタ上に変数値の表示   配列エディタ上で変数値を表示することもできます。カレントの変数を表示するには、ワークスペースブラウザを使用します。ワークスペースブラウザ上で、変数をダブルクリックすると、配列エディタがオープンし、選択した変数の値を表示します。ある特定の変数について、配列エディタをオープンするには、関数 openvarを使用します。

たとえば、配列エディタで、n の値を見るには、つぎのようにタイプしてください。

この操作により、配列エディタがオープンし、n = 2 という予想通りの結果となっていることが確認できます。

選択した変数値の分析   選択した変数の値を調査するエディタ/デバッガ上でM-ファイルを構成する変数、または、数式を選択してください。選択したら、右クリックを行い、表示されたコンテキストメニューから選択したものの値(Evaluate Selection) を選択します。これにより、MATLABは選択した変数、または、数式の値をコマンドウィンドウ上に表示します。ただし、M-ファイル実行時など、MATLABがビジー状態にある場合は、選択した変数の値を調べることはできません。

例題の中で変数の値を調べる   collatzの実行中に、ステップボタン、または、関数 dbstep を使用します。それにより、プログラムはライン10まで実行されますが、ここではまだ変数の値をチェックする必要がありません。そのため、プログラムの実行をライン13まで進めることにします。

ここで、再びプログラムの実行を進めると、ポーズインジケータは予想通り、if ループ直後のライン17までジャンプします。これは、ライン13のコードに next_value = 2という値が受け渡されたからです。ここで、さらにプログラムの実行を進めると、ライン17における変数 sequence の値をチェックすることが可能となり、その値が、 n = 2の時に期待された 2 1  という値になっていることが確認できます。そこで、さらにライン18からライン11へと実行を進めると、ここでは、next_value1 となっているため、ループは終了します。この場合、ポーズインジケータはライン10にグリーンの下矢印で表示されます。グリーンの下矢印は、呼び出された関数の実行が終了し、プログラムの制御がメインプログラムに復帰したことを示しています。この場合では、collatzplot のライン10に復帰します。

collatzplot の実行をライン単位でさらに進めていきましょう。ライン1112まで進めると、変数 sequence_length は要素1 2 からなるベクトルとなり、正しい値になっていることが確認できます。

最後に、ライン13までライン単位で実行を進めていきます。ライン12の変数値をチェックすると、m = 2は予想通りとなっていますが、二番目の変数は2つの値をとり、そのうちの1つの値しか予想通りになっていないことがわかります。ライン13では、二番目の変数である plot_seq は、予想通りの値 2 1 になっていますが、変数 plot_seq はプロットすべき変数ではありません。プロット表示の対象となるのは、変数 seq_length です。


 M-ファイルをライン毎に実行 問題の修正とデバッグの終了