Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[3.x] [Debugger] Add --debug-server CLI option. #60819

Merged
merged 1 commit into from
May 6, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 11 additions & 5 deletions editor/script_editor_debugger.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1560,8 +1560,10 @@ void ScriptEditorDebugger::_clear_execution() {
stack_script.unref();
}

void ScriptEditorDebugger::start() {
stop();
void ScriptEditorDebugger::start(int p_port, const IP_Address &p_bind_address) {
if (is_inside_tree()) {
stop();
}

if (is_visible_in_tree()) {
EditorNode::get_singleton()->make_bottom_panel_item_visible(this);
Expand All @@ -1573,7 +1575,11 @@ void ScriptEditorDebugger::start() {
}

const int max_tries = 6;
remote_port = (int)EditorSettings::get_singleton()->get("network/debug/remote_port");
if (p_port < 0) {
remote_port = (int)EditorSettings::get_singleton()->get("network/debug/remote_port");
} else {
remote_port = p_port;
}
int current_try = 0;
// Find first available port.
Error err = server->listen(remote_port);
Expand All @@ -1582,7 +1588,7 @@ void ScriptEditorDebugger::start() {
current_try++;
remote_port++;
OS::get_singleton()->delay_usec(1000);
err = server->listen(remote_port);
err = server->listen(remote_port, p_bind_address);
}
// No suitable port found.
if (err != OK) {
Expand All @@ -1592,7 +1598,7 @@ void ScriptEditorDebugger::start() {
EditorNode::get_singleton()->get_scene_tree_dock()->show_tab_buttons();

auto_switch_remote_scene_tree = (bool)EditorSettings::get_singleton()->get("debugger/auto_switch_to_remote_scene_tree");
if (auto_switch_remote_scene_tree) {
if (is_inside_tree() && auto_switch_remote_scene_tree) {
EditorNode::get_singleton()->get_scene_tree_dock()->show_remote_tree();
}

Expand Down
2 changes: 1 addition & 1 deletion editor/script_editor_debugger.h
Original file line number Diff line number Diff line change
Expand Up @@ -244,7 +244,7 @@ class ScriptEditorDebugger : public MarginContainer {
static void _bind_methods();

public:
void start();
void start(int p_port = -1, const IP_Address &p_bind_address = IP_Address("*"));
void pause();
void unpause();
void stop();
Expand Down
23 changes: 23 additions & 0 deletions main/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,7 @@
#include "editor/editor_translation.h"
#include "editor/progress_dialog.h"
#include "editor/project_manager.h"
#include "editor/script_editor_debugger.h"
#ifndef NO_EDITOR_SPLASH
#include "main/splash_editor.gen.h"
#endif
Expand Down Expand Up @@ -133,6 +134,7 @@ static OS::ProcessID allow_focus_steal_pid = 0;
static bool delta_sync_after_draw = false;
#ifdef TOOLS_ENABLED
static bool auto_build_solutions = false;
static String debug_server_uri;
#endif

// Display
Expand Down Expand Up @@ -257,6 +259,7 @@ void Main::print_help(const char *p_binary) {
#ifdef TOOLS_ENABLED
OS::get_singleton()->print(" -e, --editor Start the editor instead of running the scene.\n");
OS::get_singleton()->print(" -p, --project-manager Start the project manager, even if a project is auto-detected.\n");
OS::get_singleton()->print(" --debug-server <address> Start the editor debug server (<IP>:<port>, e.g. 127.0.0.1:6007)\n");
#endif
OS::get_singleton()->print(" -q, --quit Quit after the first iteration.\n");
OS::get_singleton()->print(" -l, --language <locale> Use a specific locale (<locale> being a two-letter code).\n");
Expand Down Expand Up @@ -733,6 +736,19 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph
} else if (I->get() == "-p" || I->get() == "--project-manager") { // starts project manager

project_manager = true;

} else if (I->get() == "--debug-server") {
if (I->next()) {
debug_server_uri = I->next()->get();
if (debug_server_uri.find(":") == -1) { // wrong address
OS::get_singleton()->print("Invalid debug server address. It should be of the form <bind_address>:<port>.\n");
goto error;
}
N = I->next()->next();
} else {
OS::get_singleton()->print("Missing remote debug server server, aborting.\n");
goto error;
}
} else if (I->get() == "--build-solutions") { // Build the scripting solution such C#

auto_build_solutions = true;
Expand Down Expand Up @@ -2063,6 +2079,13 @@ bool Main::start() {
ERR_PRINT("Failed to load scene");
}
OS::get_singleton()->set_context(OS::CONTEXT_EDITOR);
// Start debug server.
if (!debug_server_uri.empty()) {
int idx = debug_server_uri.rfind(":");
IP_Address addr = debug_server_uri.substr(0, idx);
int port = debug_server_uri.substr(idx + 1).to_int();
ScriptEditor::get_singleton()->get_debugger()->start(port, addr);
}
}
#endif
if (!editor) {
Expand Down