Очистить стек в окне Visual Studio Immediate

При работе с непосредственным окном нужно различать время выполнения и время разработки.

Если я использую ближайшее окно во время разработки и помещаю локальную переменную в стек:

string s = "test";

VS запустит компилятор и создаст новую переменную s в куче и поместит указатель на нее в временном стеке, которое он использует во время разработки. (По крайней мере, я думаю, что это работает, по крайней мере, упрощено. Пожалуйста, поправьте меня, если я ошибаюсь, хотя)

С этого момента я не могу использовать s ни для чего другого, пока не запустил приложение или не закрыл VS:

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

Я могу использовать контекстное меню, чтобы очистить ближайшее окно, но это действительно просто очищает само окно. Мои локальные переменные все еще остаются в стеке.

Мне было интересно, если действительно нет способа очистить все переменные, которые я ранее создал внутри непосредственного окна?

(Я использую VS 2012 SP1 Prof., но я думаю, что проблема остается неизменной при каждой версии VS)

Ответ 1

Я не знаю точных оснований именно того, что происходит в visual studio, но похоже, что VS хранит скомпилированную версию в процессе vshost.exe.

Если вы убьете связанный процесс (например, WindowsFormsApplication1.vshost.exe * 32), он очистит стек и позволит вам повторно использовать переменную без перезапуска VS.

Ответ 2

Отладка времени разработки описана в этой странице MSDN. Скорее всего, это конкретная помощь, которая поможет решить вашу проблему. Пример кода Visual Basic не совсем случайно, это была важная особенность старой версии VB6. И, конечно, более практично в этой среде программирования, поскольку было принято писать процедурный код, который легко тестировать и отлаживать с помощью окна Immediate.

Самый быстрый способ, с помощью которого я могу исправить состояние выполнения интерпретатора, - нажать F11 (Debug + Step Into) и отменить отладку. Или введите > Debug.StepInto и > Debug.StopDebugging. Не идеально.