12

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

如果我在设计时使用即时窗口并将局部变量放入堆栈:

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 都是一样的)

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 + Step Into)并取消调试。或者输入 >Debug.StepInto 和 >Debug.StopDebugging。不理想。

于 2013-01-03T20:05:26.417 回答