1. ホーム
  2. visual-studio

[解決済み] Visual Studioでイミディエイトウィンドウを使うには?

2022-06-27 22:51:55

質問

イミディエイトウィンドウは、アプリケーションのデバッグに非常に便利なツールです。ブレークポイントのコンテキストで有効なコードステートメントを実行し、値を検査するために使用することができます。また、言語機能を学習するためにコード スニペットを入力するためにも使用します。

イミディエイトウィンドウはどのように使うのですか?

解決方法を教えてください。

Visual Studio のイミディエイトウィンドウの素晴らしい機能の 1 つに、メソッドの戻り値を評価する機能があります。 ではない が変数代入の一部でない場合です。デバッグ モードでは、前述のように、変数と対話し、メモリ内の式を実行することができ、これができるようになるために重要な役割を果たします。

たとえば、次のような 2 つの数値の合計を返す静的メソッドがあったとします。

private static int GetSum(int a, int b)
{
    return a + b;
}

そして、イミディエイトウィンドウに次のように入力します。

? GetSum(2, 4)
6

見ての通り、これは静的なメソッドに対しては非常にうまく動作します。 しかし、メソッドが非静的な場合は、そのメソッドが属するオブジェクトへの参照と対話する必要があります。

例えば、あなたのクラスがこのようなものだとします。

private class Foo
{
    public string GetMessage()
    {
        return "hello";
    }
}

オブジェクトがすでにメモリ上に存在し、それがスコープ内にある場合、インスタンス化されていれば、イミディエイトウィンドウで呼び出すことが可能です 前に 現在のブレークポイントの前 (または、少なくともデバッグモードでコードが一時停止された場所の前) にインスタンス化されている限り、イミディエイトウィンドウで呼び出すことができます。

? foo.GetMessage(); // object ‘foo’ already exists
"hello"

さらに、メモリ上の既存のインスタンスに依存せずに直接メソッドと対話し、テストしたい場合、インスタンス化した を所有する のインスタンスをイミディエイトウィンドウに表示させることができます。

? Foo foo = new Foo(); // new instance of ‘Foo’
{temp.Program.Foo}
? foo.GetMessage()
"hello"

さらに一歩進んで、さらなる評価や計算などを行いたい場合は、メソッドの結果を一時的に変数に代入することができます。

? string msg = foo.GetMessage();
"hello"
? msg + " there!"
"hello there!"

さらに、新しいオブジェクトの変数名を宣言せず、単にそのメソッド/関数の1つを実行したい場合は、次のようにします。

? new Foo().GetMessage()
"hello" 

メソッドの値を見るための非常に一般的な方法は、クラスのメソッド名を選択して 'ウォッチ追加' を行い、ウォッチウィンドウでその現在の値を見ることができるようにすることです。 しかし、もう一度言いますが、有効な値が表示されるためには、オブジェクトがインスタンス化され、スコープ内にある必要があります。 これは、イミディエイトウィンドウを使うよりもはるかに非力で、制限も多いものです。

メソッドの検査とともに、簡単な数学の方程式を実行することができます。

? 5 * 6
30

または値を比較する。

? 5==6
false
? 6==6
true

イミディエイトウィンドウに直接入っている場合はクエスチョンマーク('?')は不要ですが、ここではわかりやすくするために入れています(入力された式と結果を区別するため)。しかし、コマンドウィンドウにいるときにイミディエイトウィンドウでいくつかの作業を行う必要がある場合は、文の前に'?

イミディエイトウィンドウでのインテリセンスの動作 しかし、時々、少し一貫性がないことがあります。私の経験では、デバッグ モードでのみ利用可能で、デザイン モード、非デバッグ モードでは利用できないようです。

残念ながら、イミディエイトウィンドウのもうひとつの欠点は、ループをサポートしないことです。