gpt4 book ai didi

c# - 使用 C# 在 Visual Studio 的即时窗口中运行多行

转载 作者:行者123 更新时间:2023-11-30 14:49:06 25 4
gpt4 key购买 nike

有没有办法在 Visual Studio 的即时窗口中的单个条目中运行多个命令?我正在运行 Visual Studio 2013。

我有一个问题,当我可以在即时窗口中创建一个输入对象并单步执行时,调试起来要容易得多,但是每次我对代码进行更改时,我都必须像这样重新创建对象:

var inputObject = new InputObject();
inputObject.Property1 = "value";
inputObject.Property2 = "value";
inputObject.Property3 = "value";
//etc.

我不得不通过单独运行每一行来帮助调试这个问题来重建这个对象,这很痛苦。有没有办法在一个命令中运行它们?像这样的东西(虽然显然这不起作用):

var inputObject = new InputObject(); inputObject.Property1 = "value"; inputObject.Property2 = "value"; inputObject.Property3 = "value";

我从这个链接看到在 Visual Basic 中是可能的:Using colons to put two statements on the same line in Visual Basic

也欢迎对实现最终目标的其他方法提出任何建议。

最佳答案

简而言之,没有。我认为即时窗口目前不支持多条语句。

编辑——@Christopher_G_Lewis 实际上是正确的,您可以声明和实例化新变量,但我发现该语句必须以分号结尾,这与许多其他可能没有分号的表达式不同。

您所做的是一种困难的调试方法。如果您遇到不使用传统方法(例如单步执行代码、断点、跟踪)难以调试的问题,您应该考虑使用调试帮助

调试辅助工具可能会有所不同,但为什么不临时编译一小段代码来帮助您解决问题呢? Visual Studio 中的即时窗口并不是真正用于按需创建控制流或新对象,而是更多地用于执行简单的语句和表达式以进行快速分析。

不过,您的示例对于推荐一种具体方法来说有点含糊,而且我不确定您实际想要完成什么。代码中的简单 struct 仍然允许您通过立即窗口使用它,如果您担心不小心将它留在代码中,您可以使用 #DEBUG 常量以确保它不会被编译到您的发布配置中。

#if DEBUG
struct DebuggingAid
{
public string A;
public string B;
public string C;
}
#endif

#if DEBUG
public void f()
{
var aid = new DebuggingAid { A = "TestValue1", B = "TestValue2" };

// var real data

MethodBeingDebuggedWithStubDebuggingAidData(aid.A, A.B);
}
#endif

不过,我肯定会考虑您可以使用的不同调试方法。

  • 断点比您可能意识到的更强大。您可以设置条件语句,也可以在命中断点时打印信息,甚至调用函数。
  • 函数断点允许您在无法追踪可能调用的时间或从何处调用的情况下中断具有特定名称的方法。您还可以设置条件和操作。
  • 使用 System.Diagnostics.DebugSystem.Diagnostics.Trace 进行跟踪以协助 IDE 中的调试器输出,您还可以将跟踪写入文件。
  • 调试辅助工具,如前所述,完成后将它们从代码中删除,或者保留它们但编译出 #if DEBUG
  • 单元测试 - 向您的代码库添加单元测试没有错误的时间。您将需要稍微重构您的代码以促进可测试性,例如传递依赖项,这似乎是您正在尝试做的事情? (将测试值存入某些东西?)。
  • 即时窗口,只需操作您尝试( stub ?)的真实数据,而不是创建调试辅助工具或测试对象

如果您可以更详细地说明您要完成的目标,那么提供一些指导会更容易一些,但希望这对您有所帮助。

关于c# - 使用 C# 在 Visual Studio 的即时窗口中运行多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39412750/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com