12

即時ウィンドウで作業する場合、実行時と設計時を区別する必要があります。

設計時に即時 Window を使用し、ローカル変数をスタックに入れると、次のようになります。

string s = "test";

VS はコンパイラを起動し、ヒープ上に s という新しい変数を作成し、設計時に使用する一時スタックフレームにその変数へのポインタを配置します。(少なくとも、それがどのように機能するか、少なくとも単純化されていると思います。間違っている場合は修正してください)

これからは、アプリケーションを実行するか VS を閉じるまで、 s を他の目的で使用することはできません。

int s = 12;
A local variable named 's' is already defined in this scope

コンテキストメニューを使用して即時ウィンドウをクリアできますが、これは実際にはウィンドウ自体をクリアするだけです。私のローカル変数はまだスタックに残っています。

イミディエイト ウィンドウ内で以前に作成したすべての変数をクリアする方法が実際にないのではないかと考えていました。

(私はVS 2012 SP1教授を使用していますが、問題はVSのすべてのバージョンで同じままだと思います)

4

2 に答える 2

2

Visual Studio で何が起こっているのか正確な基盤はわかりませんが、VS は vshost.exe プロセスでコンパイル済みのバージョンを保持しているようです。

関連するプロセス (つまり、WindowsFormsApplication1.vshost.exe *32) を強制終了すると、スタックがクリアされ、VS を再起動しなくても変数を再利用できるようになります。

于 2013-01-03T19:26:53.577 に答える
1

設計時のデバッグについては、この MSDN ページで説明されています。あなたの問題に対処する特定のヘルプがかなり不足しています。Visual Basic コードの例はまったくの偶然ではなく、これは昔の VB6 IDE の重要な機能でした。イミディエイト ウィンドウで簡単にテストおよびデバッグできる手続き型コードを記述することが一般的だったため、そのプログラミング環境では確かにより実用的です。

インタープリターの実行状態をクリアする最も簡単な方法は、F11 (デバッグ + ステップ イン) を押してデバッグをキャンセルすることです。または、>Debug.StepInto および >Debug.StopDebugging と入力します。理想的ではありません。

于 2013-01-03T20:05:26.417 に答える