デバッグ機能

VisaulStudioには、ユーザーの開発支援をおおなうための機能が多数ありますが、その中で最も利用頻度が高く、便利なのは、なんといってもデバッグ機能でしょう。

通常、プログラムの誤りのことを、バグ(bug)と言います。これは、英語で「虫」を表す言葉で、このバグをとることを、デバッガ(debug)と言います。デバッグ機能は、VisualStudioで、このデバッグを行うための機能なのです。ここでは、VisualStudioのデバッガを使って、C#言語のデバッグ作業を行う方法を紹介します。

ブレークポイントの設置と、デバッグ機能の利用

VisualStudio2015のデバッガにはさまざまな機能がありますが、その中で基本になるのが、ブレークポイントと呼ばれるものです。これは、プログラムを任意の場所で停止させるために必要です。

ブレークポイントの設置

ブレークポイントの設置 プログラムの停止したい行の左側をクリックすると、赤い丸が出ますこれが、ブレークポイントで、デバッグ実行時にこの場所でプログラムを停止させることができるのです。

ブレークポイントは、プログラムの中にいくつでも設置することができます。

すでにブレークポイントが設置されている部分をもう一度クリックすると、この赤い丸が消え、ブレークポイントが無効になります。

デバッグ開始

ブレークポイントを設置したら、次にプログラムを実行します。ただし、デバッグを行うときは、通常の実行方法とは違う方法でプログラムを実行します。これを、デバッグ実行といいます。VisualStudio2015では、通常のプログラムの実行と、このデバッグ実行の二通りのプログラムの実行方法があります。

デバッグ実行を行いには、メニューの[デバッグ]メニューから、[デバッグ開始]を選択するか、F5キーを押せば、デバッグが開始します。

デバッグ開始

デバッグ作業

ブレークポイントでの処理の停止 デバッグが開始されると、プログラムの先頭に黄色い矢印が出現します。この矢印は、「ここまでプログラムを実行してきている」ということを表しています。

これにより、画面がデバッグモードに移行します。

この画面での細かい操作は、画面上にある以下のボタンで操作します。

デバッグの処理ボタン一覧

ブレークポイントが複数ある場合、実行ボタンボタンを押すと、次のブレークポイントまでジャンプできます。

一行ごとの実行(ステップオーバー)

一行ごとの実行(ステップオーバー) まずは、ブレークポイントで停止位置した位置から、プログラムを一行ずつ実行する方法を紹介します。これを、ステップオーバーといいます。

これは、ステップオーバーのボタンボタンを押すことにより実行されます。

ステップオーバーをすると、プログラムの実行位置を示す黄色い矢印は、一行ずつ次の行へ移動していきます。

ステップオーバーを用いれば、プログラムの実行結果を一行ごとに検証することが可能になります。
デバッグは、ストップボタンボタンを押せば、終了することができます。

メソッドの中の処理へ入る(ステップイン)

メソッドの中の処理へ入る(ステップイン) 処理の中にメソッドがあった場合、その中にはいることができます。これをステップインといいます。

これは、ステップインのボタンボタンを押すことにより実行されます。

ステップイン後は、ステップオーバーで、処理を継続します。メソッド内にさらに別のメソッドがあれば、さらに深い階層までステップインしていくことが可能です。

メソッドの中の処理から出る(ステップアウト)

メソッドの中の処理から出る(ステップアウト) ステップインで入ったメソッドの中から外に出る処理のことを、ステップアウトといいます。

これは、ステップリターンのボタンボタンを押すことにより実行されます。

ステップアウトにより、ステップインの時に呼び出した関数処理の次の処理に戻ることができます。

その他のツール

デバッガの様々なツール

VisualStudioには、その他にも様々なツールがあるので、ここで主要なものを紹介しておきます。

ローカル

ローカル VisualStudio2015の左下にあるのが、ローカルという、変数の内容をチェックするためのツールです。

ローカルで使用されている変数と、その値が表示されます。値の部分をクリックし、入力すると、実行中の変数の値を変更することができます。

ウォッチ

ウォッチ ローカルの下にあるタブをクリックすることで、ツールをウォッチに切り替えることが可能です。

ウォッチは、ローカルと似たツールですが、内容を見る変数を自分で入力する必要があります。空欄になっている「名前」をクリックし、変数名を入力すれば、その値を見ることができます。

ウォッチ同様、値を変更することが可能です。

呼び出し履歴

呼び出し履歴 呼び出し履歴は、それまで処理がたどってきた履歴がわかります。あるメソッドが呼び出されている場合、その呼び出し元をたどることができます。

これにより、どのような流れでその処理が実行されているかが分かります。