最近、Visual Studioでプログラミングをはじめたけど、「デバッグ」のやり方が分からない。
プログラミングをはじめたばかりの人にとって、プログラムのエラーを探すのはかなり大変な作業ですよね。そんな時に使用したいのが「デバッグ機能」です。
この記事では、Visual Studioで開発している初心者の方向けにデバッグの方法を解説します。
目次
そもそもデバッグとは
デバッグってよく聞くけど何なのかな?
デバッグは開発をスムーズに進めるための重要な要素の1つですね。プログラマーであれば、しっかりと出来るようになっていきたいところです。
デバッグとは
デバッグ(debug)「de(否定,除去)+bug(虫)」とは、コンピュータプログラムや電気機器中のバグ・欠陥を特定して取り除き、動作を仕様通りのものとするための作業である。サブシステムが密結合であると、1箇所の変更が別の箇所でのバグを作り出すので、バグの修正がより困難となる。
wikipedia 「デバッグ」より
デバッグの語源が虫を取り除くというのは面白いですね!
デバッグの目的
■バグの原因を特定する
プログラムでエラーが発生した場合、エラー直前の状態や変数の値を確認し、原因を特定する必要があります。
■挙動をテストする
プログラムが意図した動作で実行されるかどうかをテストします。
デバッグスキル≒開発スキル
デバックスキルは開発スキルに直結します。なぜなら、正常なプログラムの作成にはデバック
開発者にとって重要なスキルについてまとめたので、こちらも参考にしてください。
デバッグツール
Visual Studioは統合開発環境(IDE)です。つまり、デバッグもVisual Studioで出来ます。
Visual Studioのデバッグ方法
■開発環境
・Visual Studio2022
・フレームワーク:.NET 6.0
・開発言語:C#
サンプルプロジェクト作成
デバッグを練習するためのプロジェクトを作成しましょう。Visual Studio 2022を起動します。
コンソールアプリを選択します。 |
プロジェクト名を「ConsoleApp1」と設定。 |
フレームワークは「.NET 6.0」を選択し、「作成」します。
Program.csに以下のプログラムをコピペします。これは配列に入れられた野菜と果物を読み分けるプログラムです。
string[] sArray = { "りんご", "もも", "キャベツ", "みかん", "すいか" };
bool IsVegetable =true;
foreach(var s in sArray)
{
if (s == "りんご" || s == "もも" || s == "みかん")
IsVegetable = false;
Console.Write(s);
ReturnVegetable(IsVegetable);
}
Console.ReadLine();
void ReturnVegetable(bool IsVegetable)
{
if (IsVegetable)
Console.WriteLine(":野菜です。");
else
Console.WriteLine(":果物です。");
}
実行すると以下の結果が返されます。
キャベツとすいかは「野菜です。」と返されるはずですが、果物と返されています。このプログラムがなぜこうなるのか、デバッグして調べていきます。
デバック実行(F5)
Visual Studioには2種類の実行方法があります。デバック実行とリリース実行です。デバック実行ではプログラムにブレークポイントを設定したり、エラーが発生した場合、エラーメッセージを確認できる実行方法です。
(ブレークポイントは後ほど説明します。)
一方で、リリース実行はブレークポイントを設定してもプログラムが停止せず、エラーが発生してプログラムが強制終了してもメッセージは表示されないリリース時と同様の挙動をテストする実行方法になります。
下の画像の赤枠で囲まれたダイアログで設定でき、デフォルトでデバック実行が適用されています。
ブレークポイントの設定
プログラムの左側にある灰色のスペースをクリックすることでブレークポイントが設定できます。 |
では、アプリを実行してみましょう。
11行目でブレークポイントを設定すると11行目の直前でプログラムがストップします。 |
ステップ実行
プログラムを1行ずつ実行するにはステップ実行をします。
■ステップオーバー(F10) プログラムを1行ずつ実行させる場合に使用します。 ■ステップイン(F11) 停止行が関数の場合、 関数の最初の行に移動します。関数でない場合は、 ステップオーバーと同じ動作をします。 |
先ほどのサンプルプログラムで11行目にブレークポイントを設定した状態でステップオーバー(F10)を押すと、12行目で待機状態になります。
11行目にブレークポイントを設定した状態でステップイン(F11)を押すと、16行目の関数の最初の行で待機状態になります。
■ステップイン(F11)ステップインの中から出る「ステップアウト」という機能もあります。
自動変数
自動変数では宣言した変数や関数の結果を自動的に表示してくれます。アプリを実行する最中を確認すると、s=キャベツがs=みかんになっているのが分かります。
この機能を利用して変数の値を確認しつつ、デバックしてみましょう。
サンプルプログラムのバグをデバックして解決する
11行目のブレークポイントを設定すると、foreach内の1回目のループで止まります。ステップオーバー(F10)と自動変数を使用して変数の値を確認しましょう。
ループ1回目 | s=”りんご” IsVegitable=false |
ループ2回目 | s=”もも” IsVegitable=false |
ループ3回目 | s=”キャベツ” IsVegitable=false |
ループ4回目 | s=”みかん” IsVegitable=false |
ループ5回目 | s=”すいか” IsVegitable=false |
IsVegitableがずっとfalseになっています。IsVegitableに値を代入している7~8行目が原因のようでした。野菜を判定した場合、trueを代入する処理が抜けていたのでした。
if (s == "りんご" || s == "もも" || s == "みかん") IsVegetable = false; else IsVegetable = true;
まとめ
デバックは重要な開発スキルの1つです。Visual Studioは非常に使いやすいデバック機能を備えていますので、ぜひ使いこなしてください。最後に、この記事のポイントをまとめておきたいと思います。
・ステップ実行にはステップオーバー(F10)とステップイン(F11)がある
コメント