46

C# Interactive 似乎比即时窗口强大得多(至少它处理 LINQ 中经常使用的 lambda 表达式 - 请参阅Visual Studio 调试“快速监视”工具和 lambda 表达式),但它看起来不能用作一个替代品,因为它不知道调试器上下文。有没有办法访问调试器上下文?

我已经看到在 F# 交互式中获取调试器上下文,它可能需要相同的东西,但也许有新的/不同的东西可用。

http://extendedimmediatewin.codeplex.com/可能很有用,但看起来很死,尽管有人在 2011 年 10 月 18 日说他计划将其移植到 VB.Net ( http://extendedimmediatewin.codeplex.com/discussions/75589)。

4

3 回答 3

50

不是一个完整的解决方案,但在 VS2015 中,在运行Initialize Interactive with Project后,您可以使用Debug > Attach to Process连接到InteractiveHost.exe进程。

然后,您可以从项目中调试函数。不过,正如 Kevin 解释的那样,您将无法在交互式窗口中调试一次性功能。

作为旁注,https://stackoverflow.com/a/40650343/467110指出您可能必须在打开解决方案之前打开一个 C# 交互窗口才能成功初始化与项目的交互

于 2017-03-30T01:29:41.447 回答
47

免责声明:我在 Microsoft 的 Roslyn 团队工作。

不幸的是,我们现在没有办法获取调试器上下文。我们知道它会很有用,并且随着我们完成 Roslyn 的更多核心可交付成果,我们希望进行更多调查并看看可以做些什么。

于 2011-10-26T03:20:28.217 回答
2

在 C# Interactive 中,您可以运行

System.Diagnostics.Debugger.Launch();

请求调试器,您将获得一个窗口,要求您选择一个打开的 Visual Studio 实例或要附加的新实例。假设您使用了 Visual Studio 的“Load Interactive with the Project”选项 - 现在,当 Interactive 运行代码时,打开的解决方案中的任何断点都会被命中。

如果您需要没有预先存在的代码的调试器 - 您现在可以插入

System.Diagnostics.Debugger.Debug();

调用您放入 Interactive 的代码(但它必须进入一个“块”,即按一次“输入”),您将能够通过“本地”窗口检查本地变量并针对交互式上下文运行代码通过“立即”窗口。

于 2022-01-11T17:18:10.820 回答