Add some logging to track cases where “step-in” steps out due to the avoid-regexp...
authorJim Ingham <jingham@apple.com>
Thu, 14 Mar 2013 21:44:36 +0000 (21:44 +0000)
committerJim Ingham <jingham@apple.com>
Thu, 14 Mar 2013 21:44:36 +0000 (21:44 +0000)
llvm-svn: 177117

lldb/source/Target/ThreadPlanStepInRange.cpp

index d4b917f..c21eb69 100644 (file)
@@ -274,7 +274,19 @@ ThreadPlanStepInRange::FrameMatchesAvoidRegexp ()
         {
             const char *frame_function_name = sc.GetFunctionName().GetCString();
             if (frame_function_name)
-               return avoid_regexp_to_use->Execute(frame_function_name);
+            {
+                bool return_value = avoid_regexp_to_use->Execute(frame_function_name);
+                if (return_value)
+                {
+                    LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_STEP));
+                    if (log)
+                        log->Printf ("Stepping out of function %s because it matches the avoid regexp \"%s\".",
+                                     frame_function_name,
+                                     avoid_regexp_to_use->GetText());
+
+                }
+                return return_value;
+            }
         }
     }
     return false;
@@ -285,12 +297,12 @@ ThreadPlanStepInRange::DefaultShouldStopHereCallback (ThreadPlan *current_plan,
 {
     bool should_step_out = false;
     StackFrame *frame = current_plan->GetThread().GetStackFrameAtIndex(0).get();
+    LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_STEP));
 
     if (flags.Test(eAvoidNoDebug))
     {
         if (!frame->HasDebugInformation())
         {
-            LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_STEP));
             if (log)
                 log->Printf ("Stepping out of frame with no debug info");
 
@@ -321,13 +333,18 @@ ThreadPlanStepInRange::DefaultShouldStopHereCallback (ThreadPlan *current_plan,
                     else if (strstr (function_name, target_name) == NULL)
                         should_step_out = true;
                 }
+                if (log && should_step_out)
+                    log->Printf("Stepping out of frame %s which did not match step into target %s.",
+                                sc.GetFunctionName().AsCString(),
+                                step_in_range_plan->m_step_into_target.AsCString());
             }
         }
         
         if (!should_step_out)
         {
-                ThreadPlanStepInRange *step_in_range_plan = static_cast<ThreadPlanStepInRange *> (current_plan);
-                should_step_out = step_in_range_plan->FrameMatchesAvoidRegexp ();
+            ThreadPlanStepInRange *step_in_range_plan = static_cast<ThreadPlanStepInRange *> (current_plan);
+            // Don't log the should_step_out here, it's easier to do it in FrameMatchesAvoidRegexp.
+            should_step_out = step_in_range_plan->FrameMatchesAvoidRegexp ();
         }
     }