2017-10-05 167 views
2

不工作我有調試我的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.將嘗試檢查兼容模式 –

回答

1

內部的問題是,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。將等待,看看有人提出了一個解決方案,使這項工作與動態,否則我會設置你的答案是正確的。在此期間當之無愧 –