changeset 27286:52542cfcc7dc

always disable debug_on_error and debug_on_warning at debug prompt (bug #56625) * pt-eval.cc (tree_evaluator::enter_debugger): Disable debug_on_error and debug_on_warning when entering debugger REPL. * error.cc (error_system::maybe_enter_debugger): Don't temporarily disable debug_on_error here.
author John W. Eaton <jwe@octave.org>
date Tue, 23 Jul 2019 15:26:20 -0400
parents 6c438195f4e0
children 871313d4b948
files libinterp/corefcn/error.cc libinterp/parse-tree/pt-eval.cc
diffstat 2 files changed, 14 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/libinterp/corefcn/error.cc	Tue Jul 23 11:01:41 2019 -0400
+++ b/libinterp/corefcn/error.cc	Tue Jul 23 15:26:20 2019 -0400
@@ -694,11 +694,6 @@
                 && bptab.debug_on_caught (last_error_id ())))
         && tw.in_user_code ())
       {
-        unwind_protect frame;
-
-        frame.protect_var (m_debug_on_error);
-        m_debug_on_error = false;
-
         if (show_stack_trace)
           {
             std::string stack_trace = e.info ();
--- a/libinterp/parse-tree/pt-eval.cc	Tue Jul 23 11:01:41 2019 -0400
+++ b/libinterp/parse-tree/pt-eval.cc	Tue Jul 23 15:26:20 2019 -0400
@@ -1143,6 +1143,20 @@
     frame.add_method (m_call_stack, &call_stack::restore_frame,
                       m_call_stack.current_frame ());
 
+    // Don't allow errors or warnings at the debug prompt to push us
+    // into deeper levels of debugging.
+
+    error_system& es = m_interpreter.get_error_system ();
+
+    frame.add_method (es, &error_system::set_debug_on_error,
+                      es.debug_on_error ());
+
+    frame.add_method (es, &error_system::set_debug_on_warning,
+                      es.debug_on_warning ());
+
+    es.debug_on_error (false);
+    es.debug_on_warning (false);
+
     // Go up to the nearest user code frame.
     m_call_stack.dbupdown (0);