呼び出し履歴ウィンドウ

今回のように複数のプログラムから構成されているアプリケーションの場合、プログラム間の連携がどうなっているのかを把握するのが難しい場合があります。このような時には[呼び出し履歴ウィンドウ]を表示すると良いでしょう。呼び出し履歴ウィンドウには、現在実行中のプログラムがどのように呼び出されてきたかの一連の経路(スタックトレース)が表示されます。

呼び出し履歴ウィンドウ

一番上の行が実行中のコードで、上の行ほど実行中のコードに近く、下の行ほど呼び出し元のコードに近くなります。この例では「Program.Main」→「frmMain.btnSelect_Click」→「DataAccess.GetAllBooks」の順に呼び出していることがわかります。 各行をダブルクリックすれば呼び出し元のコードを表示することもできます。その際、呼び出し中の行は薄い緑色にてハイライトされます。

GetAllBooksの実行中に呼び出し元のコードを表示したところ

もし、呼び出し元などのコードを見ていて現在実行中の位置がわからなくなった場合には、右クリックメニューから[次のステートメントの表示]を選択すると良いでしょう。そうすると、黄色でハイライトされている行にカーソルがセットされ、実行中のコードが再表示されます。

ビジュアライザによるデータの確認

GetAllBooksメソッドの呼び出しが終わったところで、データベースから取ってきたデータが正しいかをビジュアライザで確認してみましょう。ビジュアライザとは変数の内容を見やすい形式で表示(編集)できる機能です。

DataTipsからビジュアライザの選択肢を表示

データが格納されている_AllBooks変数にマウスカーソルを当て、表示されたDataTipsの虫眼鏡アイコンの右側にある下三角形をクリックします。 「DataTable Visualizer」という文字がポップアップされるので、その文字をクリックします。そうすると「DataSetビジュアライザ」ウィンドウが表示されます(虫眼鏡のアイコンをクリックしてもかまいません)。

DataTableオブジェクト(_AllBooks)をビジュアライザで表示したところ

このビジュアライザを見れば、書籍データが正しく取得されていることがわかります。 Visual Studioには、この「DataSetビジュアライザ(DataSet、DataTable、DataView用)」のほかにも「テキストビジュアライザ」「HTMLビジュアライザ」「XMLビジュアライザ」といったビジュアライザが用意されています。確認したい変数の内容に応じて、これらのビジュアライザを使い分けることができます。

1つ目のエラーの原因を特定

ここまでは問題がなかったので、引き続きプログラムを進めてみましょう。 ここからは選択した価格帯での絞り込みが成功しているかを再びビジュアライザを使ってチェックしてみましょう。

DataViewオブジェクト(priceView)をビジュアライザで表示したところ

DataViewのビジュアライザを確認したところ、3件表示されるはずが2件しか表示されていないことが判明しました。このバグの原因は、ローカルウィンドウを見てわかるように、データの絞り込みを行うRowFilterプロパティの比較演算子の設定ミスでした。そのためコードの「{0} < 価格」の部分を正しく「{0} <= 価格」に修正します。

次のステートメントの設定によるエディットコンティニュ

エディットコンティニュをするために、修正したコード行を右クリックして、[次のステートメントの設定]を選択します。そうすると実行中の行を表すカーソル行が、修正した行に戻ります。エディットコンティニュは、ドラッグ&ドロップでも実行行を変更できますが、移動する範囲が広い場合には、今回のように[次のステートメントの設定]を使ったほうが操作ミスを減らせるでしょう。 再び、ステップ実行してビジュアライザで確認すれば、正しくデータを抽出できていることを確認できます。