[Lldb-commits] [lldb] r270770 - Add logging to ValueObjectSyntheticFilter such that one can trace through the creation of synthetic children

Enrico Granata via lldb-commits lldb-commits at lists.llvm.org
Wed May 25 14:38:33 PDT 2016


Author: enrico
Date: Wed May 25 16:38:32 2016
New Revision: 270770

URL: http://llvm.org/viewvc/llvm-project?rev=270770&view=rev
Log:
Add logging to ValueObjectSyntheticFilter such that one can trace through the creation of synthetic children

Modified:
    lldb/trunk/source/Core/ValueObjectSyntheticFilter.cpp

Modified: lldb/trunk/source/Core/ValueObjectSyntheticFilter.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Core/ValueObjectSyntheticFilter.cpp?rev=270770&r1=270769&r2=270770&view=diff
==============================================================================
--- lldb/trunk/source/Core/ValueObjectSyntheticFilter.cpp (original)
+++ lldb/trunk/source/Core/ValueObjectSyntheticFilter.cpp Wed May 25 16:38:32 2016
@@ -12,6 +12,8 @@
 // Other libraries and framework includes
 // Project includes
 #include "lldb/Core/ValueObjectSyntheticFilter.h"
+
+#include "lldb/Core/Log.h"
 #include "lldb/Core/ValueObject.h"
 #include "lldb/DataFormatters/TypeSynthetic.h"
 
@@ -65,13 +67,7 @@ ValueObjectSynthetic::ValueObjectSynthet
     m_might_have_children(eLazyBoolCalculate),
     m_provides_value(eLazyBoolCalculate)
 {
-#ifdef FOOBAR
-    std::string new_name(parent.GetName().AsCString());
-    new_name += "$$__synth__";
-    SetName (ConstString(new_name.c_str()));
-#else
     SetName(parent.GetName());
-#endif
     CopyValueData(m_parent);
     CreateSynthFilter();
 }
@@ -108,14 +104,32 @@ ValueObjectSynthetic::GetDisplayTypeName
 size_t
 ValueObjectSynthetic::CalculateNumChildren(uint32_t max)
 {
+    Log* log = GetLogIfAllCategoriesSet(LIBLLDB_LOG_DATAFORMATTERS);
+    
     UpdateValueIfNeeded();
     if (m_synthetic_children_count < UINT32_MAX)
         return m_synthetic_children_count <= max ? m_synthetic_children_count : max;
 
     if (max < UINT32_MAX)
-        return m_synth_filter_ap->CalculateNumChildren(max);
+    {
+        size_t num_children = m_synth_filter_ap->CalculateNumChildren(max);
+        if (log)
+            log->Printf("[ValueObjectSynthetic::CalculateNumChildren] for VO of name %s and type %s, the filter returned %zu child values",
+                        GetName().AsCString(),
+                        GetTypeName().AsCString(),
+                        num_children);
+        return num_children;
+    }
     else
-        return (m_synthetic_children_count = m_synth_filter_ap->CalculateNumChildren(max));
+    {
+        size_t num_children = (m_synthetic_children_count = m_synth_filter_ap->CalculateNumChildren(max));
+        if (log)
+            log->Printf("[ValueObjectSynthetic::CalculateNumChildren] for VO of name %s and type %s, the filter returned %zu child values",
+                        GetName().AsCString(),
+                        GetTypeName().AsCString(),
+                        num_children);
+        return num_children;
+    }
 }
 
 lldb::ValueObjectSP
@@ -159,6 +173,8 @@ ValueObjectSynthetic::CreateSynthFilter
 bool
 ValueObjectSynthetic::UpdateValue ()
 {
+    Log* log = GetLogIfAllCategoriesSet(LIBLLDB_LOG_DATAFORMATTERS);
+    
     SetValueIsValid (false);
     m_error.Clear();
 
@@ -175,6 +191,11 @@ ValueObjectSynthetic::UpdateValue ()
     ConstString new_parent_type_name = m_parent->GetTypeName();
     if (new_parent_type_name != m_parent_type_name)
     {
+        if (log)
+            log->Printf("[ValueObjectSynthetic::UpdateValue] name=%s, type changed from %s to %s, recomputing synthetic filter",
+                        GetName().AsCString(),
+                        m_parent_type_name.AsCString(),
+                        new_parent_type_name.AsCString());
         m_parent_type_name = new_parent_type_name;
         CreateSynthFilter();
     }
@@ -182,6 +203,8 @@ ValueObjectSynthetic::UpdateValue ()
     // let our backend do its update
     if (m_synth_filter_ap->Update() == false)
     {
+        if (log)
+            log->Printf("[ValueObjectSynthetic::UpdateValue] name=%s, synthetic filter said caches are stale - clearing", GetName().AsCString());
         // filter said that cached values are stale
         m_children_byindex.Clear();
         m_name_toindex.Clear();
@@ -192,6 +215,11 @@ ValueObjectSynthetic::UpdateValue ()
         m_synthetic_children_count = UINT32_MAX;
         m_might_have_children = eLazyBoolCalculate;
     }
+    else
+    {
+        if (log)
+            log->Printf("[ValueObjectSynthetic::UpdateValue] name=%s, synthetic filter said caches are still valid", GetName().AsCString());
+    }
     
     m_provides_value = eLazyBoolCalculate;
     
@@ -199,11 +227,17 @@ ValueObjectSynthetic::UpdateValue ()
     
     if (synth_val && synth_val->CanProvideValue())
     {
+        if (log)
+            log->Printf("[ValueObjectSynthetic::UpdateValue] name=%s, synthetic filter said it can provide a value", GetName().AsCString());
+
         m_provides_value = eLazyBoolYes;
         CopyValueData(synth_val.get());
     }
     else
     {
+        if (log)
+            log->Printf("[ValueObjectSynthetic::UpdateValue] name=%s, synthetic filter said it will not provide a value", GetName().AsCString());
+
         m_provides_value = eLazyBoolNo;
         CopyValueData(m_parent);
     }
@@ -215,6 +249,13 @@ ValueObjectSynthetic::UpdateValue ()
 lldb::ValueObjectSP
 ValueObjectSynthetic::GetChildAtIndex (size_t idx, bool can_create)
 {
+    Log* log = GetLogIfAllCategoriesSet(LIBLLDB_LOG_DATAFORMATTERS);
+    
+    if (log)
+        log->Printf("[ValueObjectSynthetic::GetChildAtIndex] name=%s, retrieving child at index %zu",
+                    GetName().AsCString(),
+                    idx);
+    
     UpdateValueIfNeeded();
     
     ValueObject *valobj;
@@ -222,7 +263,19 @@ ValueObjectSynthetic::GetChildAtIndex (s
     {
         if (can_create && m_synth_filter_ap.get() != nullptr)
         {
+            if (log)
+                log->Printf("[ValueObjectSynthetic::GetChildAtIndex] name=%s, child at index %zu not cached and will be created",
+                            GetName().AsCString(),
+                            idx);
+
             lldb::ValueObjectSP synth_guy = m_synth_filter_ap->GetChildAtIndex (idx);
+            
+            if (log)
+                log->Printf("[ValueObjectSynthetic::GetChildAtIndex] name=%s, child at index %zu created as %p",
+                            GetName().AsCString(),
+                            idx,
+                            synth_guy.get());
+
             if (!synth_guy)
                 return synth_guy;
             m_children_byindex.SetValueForKey(idx, synth_guy.get());
@@ -230,10 +283,27 @@ ValueObjectSynthetic::GetChildAtIndex (s
             return synth_guy;
         }
         else
+        {
+            if (log)
+                log->Printf("[ValueObjectSynthetic::GetChildAtIndex] name=%s, child at index %zu not cached and cannot be created (can_create = %s, synth_filter = %p)",
+                            GetName().AsCString(),
+                            idx,
+                            can_create ? "yes" : "no",
+                            m_synth_filter_ap.get());
+
             return lldb::ValueObjectSP();
+        }
     }
     else
+    {
+        if (log)
+            log->Printf("[ValueObjectSynthetic::GetChildAtIndex] name=%s, child at index %zu cached as %p",
+                        GetName().AsCString(),
+                        idx,
+                        valobj);
+
         return valobj->GetSP();
+    }
 }
 
 lldb::ValueObjectSP




More information about the lldb-commits mailing list