Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Visual Studio调试器自动变量分配_C#_Visual Studio_Debugging - Fatal编程技术网

C# Visual Studio调试器自动变量分配

C# Visual Studio调试器自动变量分配,c#,visual-studio,debugging,C#,Visual Studio,Debugging,是的,我看到了另一个话题: 但我今天需要一个解决方案,在我看到它之前就找到了,我想知道是否有更好的解决方案 我的情况是: 我有一个实体列表,并根据许多因素设置了一些与策略相关的属性。但它还没有实现,或者我只是想在实体拥有权限时测试UI,而在实体没有权限时测试UI(尽可能快地更改它以完成真正的工作) 因此,我将实体设置为具有权限,这样我就可以用它来测试UI。但我不想在列表中的每个元素都中断,并将标志从true更改为false(以测试其他情况)。我在寻找一种方法来自动更改调试器中的变量。我提出了这个

是的,我看到了另一个话题:

但我今天需要一个解决方案,在我看到它之前就找到了,我想知道是否有更好的解决方案

我的情况是: 我有一个实体列表,并根据许多因素设置了一些与策略相关的属性。但它还没有实现,或者我只是想在实体拥有权限时测试UI,而在实体没有权限时测试UI(尽可能快地更改它以完成真正的工作)

因此,我将实体设置为具有权限,这样我就可以用它来测试UI。但我不想在列表中的每个元素都中断,并将标志从true更改为false(以测试其他情况)。我在寻找一种方法来自动更改调试器中的变量。我提出了这个解决方案:

  • 设置断点
  • 为它设置一个条件,这是一个“假”条件,但它会改变变量的值
  • 在调试模式下运行
  • 如果我需要案例1。我启用断点,如果我需要另一个断点,我禁用断点
  • 简化示例:

    namespace AutoVariable
    {
        class Program
        {
            static void Main(string[] args)
            {
                try
                {
                    new Program().Entrance();
                    Console.ReadLine();
                }
                catch (Exception e)
                {
                    Console.WriteLine("Error: {0}", e.Message);
                }
            }
    
            public void Entrance()
            {
                var entities = new List<Entity>
                {
                    new Entity() { Name = "A" },
                    new Entity() { Name = "B" },
                    new Entity() { Name = "C" }
                };
    
                entities.ForEach(setRight);
                entities.ForEach(Console.WriteLine);
            }
    
            protected void setRight(Entity entity)
            {
                //not implemented
                bool hasRight = true;
                entity.HasRight = hasRight;
            }
        }
    
        class Entity
        {
            public bool HasRight { get; set; }
    
            public string Name { get; set; }
    
            public override string ToString()
            {
                return string.Format("{0} - {1}", Name, HasRight);
            }
        }
    }
    
    名称空间自动变量
    {
    班级计划
    {
    静态void Main(字符串[]参数)
    {
    尝试
    {
    新程序().入口();
    Console.ReadLine();
    }
    捕获(例外e)
    {
    WriteLine(“错误:{0}”,e.Message);
    }
    }
    公众入口()
    {
    var实体=新列表
    {
    新实体(){Name=“A”},
    新实体(){Name=“B”},
    新实体(){Name=“C”}
    };
    实体。ForEach(设定权利);
    实体.ForEach(Console.WriteLine);
    }
    受保护的无效设置权限(实体)
    {
    //未实施
    bool hasRight=true;
    entity.HasRight=HasRight;
    }
    }
    类实体
    {
    公共bool HasRight{get;set;}
    公共字符串名称{get;set;}
    公共重写字符串ToString()
    {
    返回string.Format(“{0}-{1}”,Name,HasRight);
    }
    }
    }
    
    我设置了一个条件断点:entity.HasRight=HasRight

    在这种情况下:
    (hasRight=false)

    因此hasRight将为false,断点从未命中

    但它也可以用于其他情况,例如在Jason Irwin的帖子中,您可以使用如下内容:
    (userName=“Jason”).Length<1

    所以我的问题是,这是一个好的解决方案还是我在“本机”调试器工具集中遗漏了什么

    提前谢谢


    negra

    您想使用调试器执行操作,对吗?有一种东西叫做跟踪点

    这里解释如下: 然后转到“跟踪点–遇到断点时的自定义操作”


    这就是您需要的吗?

    您想使用调试器执行操作,对吗?有一种东西叫做跟踪点

    这里解释如下: 然后转到“跟踪点–遇到断点时的自定义操作”


    这就是你需要的吗?

    这一次需要更多的时间才能达到同样的效果,但基本上是的。谢谢。这一次需要更多的时间才能达到同样的效果,但基本上,是的。谢谢。这个
    (userName=“Jason”).Length<1
    真的适合你吗?在Visual Studio 2019中,它似乎对表达式求值(因为执行停止,所以它必须已求值为
    true
    ),但从未分配变量!它在8年前对我有效,但现在还不确定:)我有一段时间没有在VS中开发,但我仍然偶尔在其他环境(如nodejs)中使用这种技术。这个
    (userName=“Jason”).Length<1
    真的对你有效吗?在Visual Studio 2019中,它似乎对表达式求值(因为执行停止,所以它必须已求值为
    true
    ),但从未分配变量!它在8年前对我有效,但现在还不确定:)我现在有一段时间没有在VS中开发,但我仍然每隔一段时间在其他环境(如nodejs)中使用此技术。