【问题标题】:Visual Studio debugger automatic variable assignmentVisual Studio 调试器自动变量分配
【发布时间】:2011-08-03 14:35:25
【问题描述】:

是的,我看到了另一个话题:Visual Studio Debugger - Automatic Variable Assignment

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

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

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

  1. 设置断点
  2. 为它设置一个条件,这是一个“假”的,但它会改变变量的值
  3. 在调试模式下运行
  4. 如果我需要这种情况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);
        }
    }
}

我设置条件断点为:entity.HasRight = hasRight;

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

因此 hasRight 将为 false 并且断点永远不会被命中。

但它也可以用于其他情况,例如在 Jason Irwin 的帖子中,您可以使用类似:(userName = "Jason").Length &lt; 1

所以我的问题是它是一个很好的解决方案还是我在“本机”调试器工具集中遗漏了一些东西?

提前致谢!

黑人

【问题讨论】:

  • 这个(userName = "Jason").Length &lt; 1 真的适合你吗?在 Visual Studio 2019 中,它似乎对表达式求值(因为执行停止,所以它必须求值为 true),但从未分配变量!
  • 它在 8 年前对我有用,但现在不确定 :) 我有一段时间没有在 VS 中开发,但我仍然偶尔在其他环境(如 nodejs)中使用这种技术。

标签: c# visual-studio debugging


【解决方案1】:

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

这里解释: http://weblogs.asp.net/scottgu/archive/2010/08/18/debugging-tips-with-visual-studio-2010.aspx 并转到“TracePoints – 遇到断点时的自定义操作”

这是你需要的吗?

【讨论】:

  • 这个需要更多的时间才能达到相同的结果,但基本上,是的。谢谢。
猜你喜欢
  • 2010-11-13
  • 2013-08-10
  • 1970-01-01
  • 2011-04-20
  • 2012-01-30
  • 1970-01-01
  • 2020-03-05
  • 1970-01-01
  • 2023-03-18
相关资源
最近更新 更多