@@ -544,25 +544,60 @@ void RemoteDebugger::debug(bool p_can_continue, bool p_is_error_breakpoint) {
544544 break ;
545545 }
546546
547+ PackedStringArray input_names;
548+ Array input_vals;
549+
547550 List<String> locals;
548551 List<Variant> local_vals;
549-
550552 script_debugger->get_break_language ()->debug_get_stack_level_locals (frame, &locals, &local_vals);
551553 ERR_FAIL_COND (locals.size () != local_vals.size ());
552554
553- PackedStringArray locals_vector;
554555 for (const String &S : locals) {
555- locals_vector .append (S);
556+ input_names .append (S);
556557 }
557558
558- Array local_vals_array;
559559 for (const Variant &V : local_vals) {
560- local_vals_array.append (V);
560+ input_vals.append (V);
561+ }
562+
563+ List<String> globals;
564+ List<Variant> globals_vals;
565+ script_debugger->get_break_language ()->debug_get_globals (&globals, &globals_vals);
566+ ERR_FAIL_COND (globals.size () != globals_vals.size ());
567+
568+ for (const String &S : globals) {
569+ input_names.append (S);
570+ }
571+
572+ for (const Variant &V : globals_vals) {
573+ input_vals.append (V);
574+ }
575+
576+ List<StringName> native_types;
577+ ClassDB::get_class_list (&native_types);
578+ for (const StringName &E : native_types) {
579+ if (!ClassDB::is_class_exposed (E) || !Engine::get_singleton ()->has_singleton (E) || Engine::get_singleton ()->is_singleton_editor_only (E)) {
580+ continue ;
581+ }
582+
583+ input_names.append (E);
584+ input_vals.append (Engine::get_singleton ()->get_singleton_object (E));
585+ }
586+
587+ List<StringName> user_types;
588+ ScriptServer::get_global_class_list (&user_types);
589+ for (const StringName &S : user_types) {
590+ String scr_path = ScriptServer::get_global_class_path (S);
591+ Ref<Script> scr = ResourceLoader::load (scr_path, " Script" );
592+ ERR_CONTINUE_MSG (scr.is_null (), vformat (R"( Could not load the global class %s from resource path: "%s".)" , S, scr_path));
593+
594+ input_names.append (S);
595+ input_vals.append (scr);
561596 }
562597
563598 Expression expression;
564- expression.parse (expression_str, locals_vector );
565- const Variant return_val = expression.execute (local_vals_array , breaked_instance->get_owner ());
599+ expression.parse (expression_str, input_names );
600+ const Variant return_val = expression.execute (input_vals , breaked_instance->get_owner ());
566601
567602 DebuggerMarshalls::ScriptStackVariable stvar;
568603 stvar.name = expression_str;
0 commit comments