1
0
mirror of https://github.com/godotengine/godot.git synced 2025-11-22 15:06:45 +00:00

Add step out to script debugger

This commit is contained in:
TsFreddie
2025-07-10 23:21:02 +08:00
parent d7cc121e64
commit bc054292d5
6 changed files with 29 additions and 0 deletions

View File

@@ -224,6 +224,10 @@ void LocalDebugger::debug(bool p_can_continue, bool p_is_error_breakpoint) {
script_debugger->set_depth(0);
script_debugger->set_lines_left(1);
break;
} else if (line == "o" || line == "out") {
script_debugger->set_depth(1);
script_debugger->set_lines_left(1);
break;
} else if (line == "fin" || line == "finish") {
String current_function = script_lang->debug_get_stack_level_function(0);

View File

@@ -458,6 +458,11 @@ void RemoteDebugger::debug(bool p_can_continue, bool p_is_error_breakpoint) {
script_debugger->set_lines_left(1);
break;
} else if (command == "out") {
script_debugger->set_depth(1);
script_debugger->set_lines_left(1);
break;
} else if (command == "continue") {
script_debugger->set_depth(-1);
script_debugger->set_lines_left(-1);

View File

@@ -47,6 +47,7 @@ DebuggerEditorPlugin::DebuggerEditorPlugin(PopupMenu *p_debug_menu) {
ED_SHORTCUT("debugger/step_into", TTRC("Step Into"), Key::F11);
ED_SHORTCUT("debugger/step_over", TTRC("Step Over"), Key::F10);
ED_SHORTCUT("debugger/step_out", TTRC("Step Out"), KeyModifierMask::ALT | Key::F11);
ED_SHORTCUT("debugger/break", TTRC("Break"));
ED_SHORTCUT("debugger/continue", TTRC("Continue"), Key::F12);
ED_SHORTCUT("debugger/debug_with_external_editor", TTRC("Debug with External Editor"));

View File

@@ -111,6 +111,13 @@ void ScriptEditorDebugger::debug_ignore_error_breaks() {
_put_msg("set_ignore_error_breaks", msg);
}
void ScriptEditorDebugger::debug_out() {
ERR_FAIL_COND(!is_breaked());
_put_msg("out", Array(), debugging_thread_id);
_clear_execution();
}
void ScriptEditorDebugger::debug_next() {
ERR_FAIL_COND(!is_breaked());
@@ -1049,6 +1056,7 @@ void ScriptEditorDebugger::_notification(int p_what) {
copy->set_button_icon(get_editor_theme_icon(SNAME("ActionCopy")));
step->set_button_icon(get_editor_theme_icon(SNAME("DebugStep")));
next->set_button_icon(get_editor_theme_icon(SNAME("DebugNext")));
out->set_button_icon(get_editor_theme_icon(SNAME("DebugOut")));
dobreak->set_button_icon(get_editor_theme_icon(SNAME("Pause")));
docontinue->set_button_icon(get_editor_theme_icon(SNAME("DebugContinue")));
vmem_notice_icon->set_texture(get_editor_theme_icon(SNAME("NodeInfo")));
@@ -1221,6 +1229,7 @@ void ScriptEditorDebugger::_update_buttons_state() {
vmem_refresh->set_disabled(!active);
step->set_disabled(!active || !is_breaked() || !is_debuggable());
next->set_disabled(!active || !is_breaked() || !is_debuggable());
out->set_disabled(!active || !is_breaked() || !is_debuggable());
copy->set_disabled(!active || !is_breaked());
docontinue->set_disabled(!active || !is_breaked());
dobreak->set_disabled(!active || is_breaked());
@@ -2040,6 +2049,13 @@ ScriptEditorDebugger::ScriptEditorDebugger() {
next->set_shortcut(ED_GET_SHORTCUT("debugger/step_over"));
next->connect(SceneStringName(pressed), callable_mp(this, &ScriptEditorDebugger::debug_next));
out = memnew(Button);
out->set_theme_type_variation(SceneStringName(FlatButton));
hbc->add_child(out);
out->set_tooltip_text(TTRC("Step Out"));
out->set_shortcut(ED_GET_SHORTCUT("debugger/step_out"));
out->connect(SceneStringName(pressed), callable_mp(this, &ScriptEditorDebugger::debug_out));
hbc->add_child(memnew(VSeparator));
dobreak = memnew(Button);

View File

@@ -125,6 +125,7 @@ private:
Button *copy = nullptr;
Button *step = nullptr;
Button *next = nullptr;
Button *out = nullptr;
Button *dobreak = nullptr;
Button *docontinue = nullptr;
// Reference to "Remote" tab in scene tree. Needed by _live_edit_set and buttons state.
@@ -315,6 +316,7 @@ public:
void debug_ignore_error_breaks();
void debug_copy();
void debug_out();
void debug_next();
void debug_step();
void debug_break();

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#ff5f5f" d="M3 15V5H1l1.5-2L4 1l1.5 2L7 5H5v10z"/><path fill="#e0e0e0" d="M7 1v2h8V1Zm2 4v2h6V5Zm0 4v2h6V9Zm-2 4v2h8v-2z"/></svg>

After

Width:  |  Height:  |  Size: 205 B