From 4ecad8dea30859a5acbac41fe0e647c7bb6a53cc Mon Sep 17 00:00:00 2001 From: Simon Barkehanai Date: Sun, 11 Jun 2023 04:20:22 -0700 Subject: [PATCH] Fix infinite loop on EOF in the command line debugger When using the command line debugger (godot -d) on Unix systems, when entering an EOF (ctrl+D), the debugger enters an infinite loop. Adding a check for EOF in the debugger loop exits the debugger when EOF is entered. Fixes #50170. --- core/debugger/local_debugger.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/core/debugger/local_debugger.cpp b/core/debugger/local_debugger.cpp index 623b1eb0ce2..dc46ffc3075 100644 --- a/core/debugger/local_debugger.cpp +++ b/core/debugger/local_debugger.cpp @@ -138,7 +138,7 @@ void LocalDebugger::debug(bool p_can_continue, bool p_is_error_breakpoint) { // Cache options String variable_prefix = options["variable_prefix"]; - if (line.is_empty()) { + if (line.is_empty() && !feof(stdin)) { print_line("\nDebugger Break, Reason: '" + script_lang->debug_get_error() + "'"); print_line("*Frame " + itos(current_frame) + " - " + script_lang->debug_get_stack_level_source(current_frame) + ":" + itos(script_lang->debug_get_stack_level_line(current_frame)) + " in function '" + script_lang->debug_get_stack_level_function(current_frame) + "'"); print_line("Enter \"help\" for assistance."); @@ -267,7 +267,8 @@ void LocalDebugger::debug(bool p_can_continue, bool p_is_error_breakpoint) { print_line("Added breakpoint at " + source + ":" + itos(linenr)); } - } else if (line == "q" || line == "quit") { + } else if (line == "q" || line == "quit" || + (line.is_empty() && feof(stdin))) { // Do not stop again on quit script_debugger->clear_breakpoints(); script_debugger->set_depth(-1);