+
+ // Check that stepping stops between nested calls
+ e = run_until ("ss_nested_2");
+ e = step_out ();
+ assert_location (e, "ss_nested");
+ e = step_into ();
+ assert_location (e, "ss_nested_1");
+ e = step_out ();
+ assert_location (e, "ss_nested");
+ // Check that step over steps over nested calls
+ e = step_over ();
+ assert_location (e, "ss_nested");
+ e = step_into ();
+ assert_location (e, "ss_nested_3");
+ req.Disable ();
+
+ // Check DebuggerStepThrough support
+ e = run_until ("ss_step_through");
+ req = create_step (e);
+ req.Filter = StepFilter.DebuggerStepThrough;
+ e = step_into ();
+ // Step through step_through_1 ()
+ e = step_into ();
+ assert_location (e, "ss_step_through");
+ // Step through StepThroughClass.step_through_2 ()
+ e = step_into ();
+ assert_location (e, "ss_step_through");
+ req.Disable ();
+ req.Filter = StepFilter.None;
+ e = step_into ();
+ assert_location (e, "step_through_3");
+ req.Disable ();
+
+ // Check that step-over doesn't stop at inner frames with recursive functions
+ e = run_until ("ss_recursive");
+ req = create_step (e);
+ e = step_over ();
+ e = step_over ();
+ e = step_over ();
+ var f = e.Thread.GetFrames () [0];
+ assert_location (e, "ss_recursive");
+ AssertValue (1, f.GetValue (f.Method.GetLocal ("n")));
+ req.Disable ();
+
+ // Check that single stepping doesn't clobber fp values
+ e = run_until ("ss_fp_clobber");
+ req = create_step (e);
+ while (true) {
+ f = e.Thread.GetFrames ()[0];
+ e = step_into ();
+ if ((e as StepEvent).Method.Name == "ss_fp_clobber_2")
+ break;
+ e = step_into ();
+ }
+ f = e.Thread.GetFrames ()[0];
+ AssertValue (7.0, f.GetValue (f.Method.GetParameters ()[0]));
+ req.Disable ();