在Visual Studio立即窗口中清除堆栈

时间:2013-01-03 19:13:07

标签: c# .net visual-studio-2012

使用即时窗口时,必须在运行时和设计时间之间有所不同。

如果我在设计时使用立即Window并将局部变量放在堆栈中:

string s = "test";

VS将启动编译器并在堆上创建一个名为s的新变量,并在设计时使用的临时堆栈帧上放置一个指针。 (至少我认为它是如何工作的,至少是简化的。如果我错了,请纠正我)

从现在开始,在运行我的应用程序或关闭VS之前,我无法将s用于其他任何事情:

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

我可以使用contextmenu清除即时窗口,但这实际上只是清除了窗口本身。我的局部变量仍然在堆栈中。

我想知道,如果真的没有办法清除我之前在即时窗口中创建的所有变量?

(我使用的是VS 2012 SP1教授,但我猜这个版本与VS的每个版本保持一致)

2 个答案:

答案 0 :(得分:2)

我不知道视觉工作室究竟发生了什么的确切基础,但似乎VS在vshost.exe进程中保留了编译版本。

如果您终止关联的进程(即WindowsFormsApplication1.vshost.exe * 32),它将清除堆栈并允许您重用该变量而无需重新启动VS。

答案 1 :(得分:1)

this MSDN page中描述了设计时调试。在解决您的问题的具体帮助上相当简短。 Visual Basic代码的例子并非完全是偶然的,这是旧的VB6 IDE中的一个重要特性。在编程环境中肯定更实用,因为编写易于使用立即窗口进行测试和调试的过程代码是很常见的。

我能想到清除解释器执行状态的最快方法是按F11(Debug + Step Into)并取消调试。或者输入> Debug.StepInto和> Debug.StopDebugging。不理想。