【问题标题】:Debug C# code without running the application在不运行应用程序的情况下调试 C# 代码
【发布时间】:2012-06-14 14:30:23
【问题描述】:

我经常需要调试/测试我的代码或其中的一小部分。

一种方法当然是运行我正在开发的应用程序,或者在开发类库时创建一个小型测试应用程序。

另一种方法是创建一个仅用于调试目的的单元测试并在 Visual Studio 中运行。

但是,如果我不想编写额外的代码(例如一次性单元测试)并且不想启动整个应用程序(需要一些时间来启动并导航到我想要调试的代码)怎么办? ?

有没有办法在Visual Stuio中运行一小部分代码分别解释C#代码?

编辑

我知道LINQPad

但有时我想知道例如Form 在运行时的样子或组件是否能够与数据库通信。所以 LINQPad 在这些情况下不适合我的需求......

【问题讨论】:

  • 如果代码依赖于其他代码,这可能会很棘手。对于非常小的独立片段,为什么不从头开始创建一个命令行项目并将代码复制粘贴到那里?
  • 您可以在 Visual Studio 中使用 QuickWatch 选项。如果您想在同一代码中测试几个不同的语句,请在该位置放置一个断点并打开快速观察窗口。您可以通过在快速观察窗口中写入语句来找到语句的结果。
  • 这是一个单独的项目?还是整个项目的一部分?
  • PowerShell;它默认安装在所有 Windows 操作系统上,并且本机使用 .NET。您可以从 PowerShell 实例化任何 C# 对象。例如using System.IO.File;[System.IO.File] 相同

标签: c# visual-studio-2010 debugging


【解决方案1】:

我使用 linqpad http://www.linqpad.net/ 快速测试 c# 代码。

【讨论】:

  • 我只是用它来做一些严肃的字符串操作,这在我的应用程序中需要很长时间才能达到 - 这太棒了!
  • 免费版不包括智能感知,但如果你从 VS 中复制代码,这无关紧要.. 但是对于完整版来说,每一分钱都是值得的 :) (不附属,只是一个满意的客户)
  • 是的,我知道并使用 linqpad。但你不能,例如显示Windows.Form 用于调试目的...
  • @Rhenser 您实际上可以在 LINQPad 中显示表单。您只需添加对 System.Windows.Form 的引用。查看here 了解如何添加引用。也许这就是你的问题。
  • @dkson 好的,我不知道你可以在 LINQPad 中为你的代码添加引用。它是一个新功能吗?自从我使用 LINQPad 以来,其实是很久以前的事了……
【解决方案2】:

另一种选择是下载最新的Roslyn community preview,然后使用C# Interactive Window。它是预发布软件,因此不支持整个 C# 功能集,但已经非常接近了。

【讨论】:

    【解决方案3】:

    看看LINQPad。它非常适合尝试代码的 sn-ps。不要被名字吓到,它支持 C#/F# 程序和表达式。

    【讨论】:

      【解决方案4】:

      快速测试的另一个选项是Scratchpad.cs。通常,这比仅仅为了尝试一个想法而创建命令行项目要好。

      【讨论】:

        【解决方案5】:

        看看F# interpreter

        我经常用它来测试小的代码示例。

        假设你有一些这样的代码:

        namespace ConsoleApplication5
        {
            public class Test
            {
                public Int32 Sum(int a, int b)
                {
                    return a + b;
                }
            }
            ...
        }
        

        启动 F# 交互窗口,为您的程序集添加引用,然后开始调试!

        > #I @"C:\PathToYourProject\bin\debug";;
        --> Added .... to library include path
        > #r "ConsoleApplication5.exe";;
        --> Referenced ...
        > let t = ConsoleApplication5.Test();;
        val t : ConsoleApplication5.Test
        > t.Sum(9, 7);;
        val it : int = 16
        > 
        

        【讨论】:

        • 哈,这很好用!我使用当前正在调试的动态创建/填充的表单进行了快速测试,并且成功了!
        【解决方案6】:

        不管你信不信,PowerShell 使用 .NET 框架。您可以从 PowerShell 调用任何内置的 C# 类。

        假设您正在尝试测试 String.Substring 方法。

        打开 PowerShell

        然后调用函数类型:

        "some string".Substring(2,1) # returns 'm'
        

        或者假设你想测试一个更复杂的内置类

        foreach($line in [System.IO.File]::ReadLines("C:\path\to\file.txt"))
        {
             $line
        }
        

        [System.IO.File]using System.IO.File; 是一回事

        PowerShell 的美妙之处 - 它是 C# 的控制台...没人知道。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2010-10-18
          • 1970-01-01
          • 2013-01-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-11-03
          相关资源
          最近更新 更多