如何快速调试我的代码 - 内部,仅开发人员,丢弃测试

时间:2016-12-01 12:46:35

标签: c# visual-studio debugging testing visual-studio-2015

我正在寻找快速调试我刚才编写的代码的方法,看看它是否正常运行并且我所有的假设都是正确的。我不想运行整个系统,因为缺少部分基础设施来获取此代码。我使用单元测试,但我发现它很麻烦。还有什么更好的吗?

目标是:

  • 快速调试任何代码,无需创建其他项目,应用程序等。
  • 轻松重复调试。
  • 测试是为了这个特定目的,可能使用固定文件路径,数据库连接,任何东西。通常在把事情做好后扔掉。
  • 需要访问我的对象的内部成员。
  • 访问私人会员将是很好的好处。
  • 我可以直接在我的对象中编写测试函数。实际上这是首选。

这样做的梦想方式是:

namespace Aaa
{
    class SomeClass
    {
        public string Name { get; private set; }

        public SomeClass(string name, int value)
        {
            this.Name = name;
            InitializeSth();
        }

        public DoSomethingPublic()
        {
            // ...
        }

        private DoSomethingPrivate()
        {
            // ...
        }

        public static void TestThis()         // <-- debug this
        {
            var obj = new SomeClass("a", 1);  // <-- put breakpoint here
            obj.DoSomethingPublic();
            obj.DoSomethingPrivate();
        }
    }
}

这在Java中是可行的并且是如此伟大的事情。这也允许访问私人物品。

但我也对其他选择持开放态度。在VS2015中有这样的东西吗?

到目前为止我尝试过:

  • 立即窗口 - 我认为不能为此目的配置
  • C#Interactive - 这似乎不支持调试。或者是吗?
  • 单元测试 - 这就是我现在使用的(使用MSTest)。但我发现非常很麻烦,因为:
    • 我需要创建新项目,或包含对MS测试程序集的引用
    • 我需要采取额外的步骤来访问内部类型和成员,或者将内容更改为公开(我不喜欢这样)。
    • 访问私人会员的更多步骤。
    • 如果在项目中使用单元测试,我会搞乱其他测试。
    • 再次开始调试需要多次点击,而不是sth + sth + F5。
    • 其中一些项目有一些解决方法,但总的来说,测试基础设施似乎是出于不同的目的,我总觉得我正在反对它。

我还发现了一些关于Resharper能够调试任何静态函数的信息。但我不想使用Resharper,主要是因为性能。

3 个答案:

答案 0 :(得分:0)

要在不运行整个应用程序的情况下调试一个方法,我经常在VS IDE中使用单元测试,因为它不会真正影响我们的应用程序的开发。

我之前使用Resharper工具获得了方法:https://blog.jetbrains.com/dotnet/2015/08/28/run-configurations-debug-any-static-method-in-visual-studio-and-more/

在VS IDE中,要直接调试方法而不调试/运行应用程序,它确实没有比单元测试项目更好的建议。

当然,如果您想在不运行应用程序的情况下调试代码,它还有其他第三方工具:

http://www.linqpad.net/

答案 1 :(得分:0)

看一下这个答案:#if DEBUG vs. Conditional(“DEBUG”)

基本上你可以使用以下内容:

{{1}}

答案 2 :(得分:0)

回答我自己的问题 - 似乎我没有评估立即窗口。

可以使用

调用任何静态方法
  • 立即窗口(只需输入TestThis()
  • 命令窗口(键入?TestThis()Debug.EvaluateStatement TestThis()

这甚至允许调用私有静态方法。如果需要,那么在启动方法之前将构建项目,并且该方法在调试器中执行,因此它将在任何断点处停止。

总结:按Alt+Ctrl+I进入立即窗口,输入带括号的方法名称,然后按Enter

有两个缺点:

  • 如果该方法不在主类(具有Main方法的方法)中,则必须使用完整的命名空间和类名,例如MyCompany.MyApp.Logic.SomeClass.TestMethod()来运行它
  • 要再次开始调试,您必须转到立即窗口并使用Up-Arrow, Enter调用最后一个命令。这比右键单击测试并选择“调试此测试”更好,但不是最佳。

如果您知道更好的事情或某些方法可以使这两个问题更好,请添加答案。我找了一段时间找到一个键盘快捷键重复上一个立即窗口命令,但找不到一个。我没有将此答案标记为现在已被接受,以防发布更好的内容。