【发布时间】:2011-08-03 14:35:25
【问题描述】:
是的,我看到了另一个话题:Visual Studio Debugger - Automatic Variable Assignment
但是我今天需要一个解决方案,并且在我看到它之前找到了一个,我想知道是否有更好的解决方案?
我的情况: 我有一个实体列表,我根据很多因素设置了一些与策略相关的属性。但它还没有实现,或者只是我想在实体有权利和没有权利时测试 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);
}
}
}
我设置条件断点为:entity.HasRight = hasRight;
在这种情况下:(hasRight = false)
因此 hasRight 将为 false 并且断点永远不会被命中。
但它也可以用于其他情况,例如在 Jason Irwin 的帖子中,您可以使用类似:(userName = "Jason").Length < 1
所以我的问题是它是一个很好的解决方案还是我在“本机”调试器工具集中遗漏了一些东西?
提前致谢!
黑人
【问题讨论】:
-
这个
(userName = "Jason").Length < 1真的适合你吗?在 Visual Studio 2019 中,它似乎对表达式求值(因为执行停止,所以它必须求值为true),但从未分配变量! -
它在 8 年前对我有用,但现在不确定 :) 我有一段时间没有在 VS 中开发,但我仍然偶尔在其他环境(如 nodejs)中使用这种技术。
标签: c# visual-studio debugging