只有当它没有达到默认情况时,是否可以在switch语句中断??

时间:2017-05-17 15:03:12

标签: c# .net visual-studio visual-studio-2015

这是一个包含8个案例的开关声明,我希望看到它什么时候出现。

不幸的是,在击球之前,它的默认值大约是10次。

现在我要么在开关处断开,按F10,在默认情况下继续,或者我在每种情况下设置断点但是默认。

我有机会改变这个吗?

无法更改switch语句或其周围方法的工作方式(不幸的是)。

编辑:我正在寻找类似条件断点的东西,但条件为switchOnThis == (default case)

3 个答案:

答案 0 :(得分:2)

您可以设置如下所示的条件断点。首先假设您有以下#diff-fea9abc0

switch\case

然后在编辑器中设置断点,并右键单击它。您可以在菜单上看到int test = 0; // value of the test will be set here switch (test) { case 1: // case 1 break; case 4: // case 4 break; case 5: // case 5 break; // up to 8 cases default: break; } 。点击它,并写下条件:

enter image description here

您可以设置如下条件:

enter image description here

当其中一个案件发生时,有条件的berakpoint会中断。

答案 1 :(得分:1)

我想出了一些东西。

您可以通过这种方式利用断点条件的副作用:

  1. switch语句之前(或之前)放置一个断点。此断点上的条件应该“引发一个标志”(例如创建一个文件)并评估除true以外的任何其他内容,以便不会触发断点。
  2. default案例中放置一个断点。此断点上的条件应“降低标志”(例如删除相同的文件),也不应评估为true
  3. switch块结束后的指令处放置断点。此断点上的条件应该只检查标志(例如,检查该文件是否存在)并返回true如果仍然引发该标志(即,触发了默认值以外的情况)。 当执行除默认值之外的其中一个案例标签时执行将中断。
  4. 我用以下代码尝试了这个:

    static void Main(string[] args)
    {
        int num = 0;
        bool hit = false;
        do
        {
            Console.WriteLine("Insert an integer value (1-8 hits, 100 to quit):");
            num = Convert.ToInt32(Console.ReadLine());
    
            switch (num) // breakpoint 1 here
            {
                case 1: hit = true; break;
                case 2: hit = true; break;
                case 3: hit = true; break;
                case 4: hit = true; break;
                case 5: hit = true; break;
                case 6: hit = true; break;
                case 7: hit = true; break;
                case 8: hit = true; break;
                default: hit = false; break; // breakpoint 2 here
            }
    
            Console.WriteLine("hit = " + hit.ToString()); // breakpoint 3 here
        } while (num != 100);
    
    }
    

    我将条件断点1置于switch (num)并具有以下条件(它的计算结果为空,因此它永不中断):

    System.IO.File.Create(@"somefile.txt").Close()
    

    default案例中的断点2具有以下条件(也评估为空):

    System.IO.File.Delete(@"somefile.txt")
    

    最后,Console.WriteLine("hit =...处的断点3,条件为:

    System.IO.File.Exists(@"somefile.txt")
    

    它的作用是被驱逐的,即只有在switch案例没有被击中时它才会在default块之后中断。

    为了使其工作,您需要将调试环境配置为使用本机和托管兼容性。转到:

    Tools -> Options -> Debugging -> General
    

    并检查Use Managed Compatibility ModeUse Native Compatibility Mode

    创建/删除文件的想法是我唯一能提出的具有副作用且不需要对代码进行任何更改的想法。

答案 2 :(得分:0)

在现有switch之前添加另一个switch相同的案例:

switch (condition)
{
  case 1:
  case 2:
  ...
  case 8:
    break;  // <-- set the breakpoint here
}