changeset 20639:31219c56874f

don't exit debugger if an error occurs (bug #46251) * input.cc (get_debug_input): Wrap body of loop in try catch block. Eliminate unused unwind_protect object.
author John W. Eaton <jwe@octave.org>
date Tue, 20 Oct 2015 11:16:33 -0400
parents 6e81f4b37e13
children 2b0886f2c186
files libinterp/corefcn/input.cc
diffstat 1 files changed, 20 insertions(+), 15 deletions(-) [+]
line wrap: on
line diff
--- a/libinterp/corefcn/input.cc	Mon Oct 19 08:22:23 2015 -0700
+++ b/libinterp/corefcn/input.cc	Tue Oct 20 11:16:33 2015 -0400
@@ -600,27 +600,32 @@
 
   while (Vdebugging)
     {
-      unwind_protect middle_frame;
-
-      reset_error_handler ();
+      try
+        {
+          reset_error_handler ();
 
-      curr_parser.reset ();
+          curr_parser.reset ();
 
-      int retval = curr_parser.run ();
+          int retval = curr_parser.run ();
 
-      if (command_editor::interrupt (false))
-        break;
-      else
-        {
-          if (retval == 0 && curr_parser.stmt_list)
+          if (command_editor::interrupt (false))
+            break;
+          else
             {
-              curr_parser.stmt_list->accept (*current_evaluator);
+              if (retval == 0 && curr_parser.stmt_list)
+                {
+                  curr_parser.stmt_list->accept (*current_evaluator);
 
-              if (octave_completion_matches_called)
-                octave_completion_matches_called = false;
+                  if (octave_completion_matches_called)
+                    octave_completion_matches_called = false;
+                }
+
+              octave_quit ();
             }
-
-          octave_quit ();
+        }
+      catch (const octave_execution_exception&)
+        {
+          // Ignore errors when in debugging mode;
         }
     }
 }