条件断点在Visual Studio 2015年

问题描述:

不工作我有调试我的C#代码在Visual Studio 2015年条件断点在Visual Studio 2015年

我想添加一个简单的表达成一个断点,

所以我添加hierarchyRelation != null作为条件的问题。这是我正在调试的方法的局部变量,它存在。

然而,在运行时出现以下错误

“为断点条件未能执行。条件是 ‘hierarchyRelation!= NULL’。返回的错误是”断点 条件必须评估的布尔运算”,点击OK停止在 这个断点。

实际上,病情更为复杂,但这是能重现问题最简单的情况。我想变,和甚至比较性能这个变量和它总是失败相同。

如果我尝试一个恒定的条件,如1 != 21 = 1它工作正常。有什么问题吗?我发现的最接近的相关问题是this,但它在vb code。其解决方案是直接在代码中添加调试方法。虽然我可以这样做,但我想知道为什么这不起作用。

方法代码

private HierarchyNodeDto GetNodeTreeThatContainsText<TRollup, TLeaf, THierarchyRelation>(HierarchyNodeDto root, string text, PreFilter preFilter, Func<TLeaf, bool> leafContainsTextFunc, bool parentContainsText) where TRollup: HierarchyNodeDto where TLeaf: HierarchyNodeDto { 
      dynamic rootNode = root as TRollup; 
      if (rootNode != null) { 
       if (rootNode.Nodes == null) { 
        return null; 
       } 
       var childNodesWithText = new List<THierarchyRelation>(); 
       foreach (var hierarchyRelation in rootNode.Nodes) { 
        var isLeaf = hierarchyRelation.Node.GetType() == typeof(TransactionTypeHierarchyLeafDto) || hierarchyRelation.Node.GetType() == typeof(AccountHierarchyLeafDto); 
        if (!isLeaf && hierarchyRelation.Node.Name != null && hierarchyRelation.Node.Name.ToLower().Contains(text) && preFilter != PreFilter.Leafs) { 
         childNodesWithText.Add(hierarchyRelation); 
         continue; 
        } 
        var subtreeThatContainsText = this.GetNodeTreeThatContainsText<TRollup, TLeaf, THierarchyRelation>(hierarchyRelation.Node, text, preFilter, leafContainsTextFunc, rootNode.Name.ToLower().Contains(text)); 
        if (subtreeThatContainsText == null) { 
         continue; 
        } 
        hierarchyRelation.Node = subtreeThatContainsText; 
        childNodesWithText.Add(hierarchyRelation); 
       } 
       rootNode.Nodes = childNodesWithText; 
       if (rootNode.Nodes.Count > 0 || (rootNode.Name.ToLower().Contains(text) && preFilter != PreFilter.Leafs)) { 
        return rootNode; 
       } 
       return null; 
      } 
      var rootLeaf = root as TLeaf; 

      return rootLeaf != null && ((leafContainsTextFunc.Invoke(rootLeaf) && preFilter != PreFilter.Nodes) || (parentContainsText && preFilter != PreFilter.Leafs)) ? rootLeaf : null; 
     } 

我加入断点在第一线的foreach

enter image description here

+2

VS2015调试器确实有相当多的错误,但是当我尝试它时,这看起来没有什么问题。确保安装了更新,至少达到更新2.可能的解决方法是避免使用工具>选项>调试>常规,“使用托管兼容模式”和“使用传统C#和VB.NET表达式评估程序”的错误。 –

+0

我已经安装了版本14.0.25431.01更新3.将尝试检查兼容模式 –

内部的问题是,hierarchyRelation是一个动态变量,虽然我不是完全肯定为什么。根据Expressions in the Debugger它应该工作(我找不到它不应该的原因)。

static void Main(string[] args) 
    { 
     dynamic foo = new Foo(); 

     // conditional breakpoint 'foo.Nodes == null' here 
    } 

    internal class Foo 
    { 
     public IEnumerable<Foo> Nodes = null; 
    } 

此代码每当经过调试和评估条件断点触发相同的异常。静态输入foo变量将使调试器能够评估表达式并在需要时中断。

+0

好吧,看起来它是一个VS错误?将尝试删除动态,看看它是否工作 –

+0

是的这似乎是调试器的问题,虽然我无法证实这一点。 –

+0

我更新了非常相同的代码,以使用静态类型的类,工作得很好。它似乎是一个动态的bug。将等待,看看有人提出了一个解决方案,使这项工作与动态,否则我会设置你的答案是正确的。在此期间当之无愧 –