EditorDebuggerPlugin

Наследует: RefCounted < Object

Базовый класс для реализации плагинов отладчика.

Описание

EditorDebuggerPlugin предоставляет функции, связанные с редакторской стороной отладчика.

Для взаимодействия с отладчиком экземпляр этого класса должен быть добавлен в редактор с помощью EditorPlugin.add_debugger_plugin().

После добавления обратный вызов _setup_session() будет вызываться для каждого EditorDebuggerSession, доступного плагину, и при создании новых (сеансы могут быть неактивны на этом этапе).

Вы можете получить доступные EditorDebuggerSession с помощью get_sessions() или получить определенный с помощью get_session().

@tool
extends EditorPlugin

class ExampleEditorDebugger extends EditorDebuggerPlugin:

    func _has_capture(capture):
        # Верните true, если вы хотите обрабатывать сообщения с префиксом «my_plugin:».
        return capture == "my_plugin"

    func _capture(message, data, session_id):
        if message == "my_plugin:ping":
            get_session(session_id).send_message("my_plugin:echo", data)
            return true
        return false

    func _setup_session(session_id):
        # Добавьте новую вкладку в пользовательский интерфейс сеанса отладчика, содержащую метку.
        var label = Label.new()
        label.name = "Example plugin" # Will be used as the tab title.
        label.text = "Example plugin"
        var session = get_session(session_id)
        # Прослушивает сигналы начала и окончания сеанса.
        session.started.connect(func (): print("Session started"))
        session.stopped.connect(func (): print("Session stopped"))
        session.add_session_tab(label)

var debugger = ExampleEditorDebugger.new()

func _enter_tree():
    add_debugger_plugin(debugger)

func _exit_tree():
    remove_debugger_plugin(debugger)

Для подключения на стороне запущенной игры используйте синглтон EngineDebugger:

extends Node

func _ready():
    EngineDebugger.register_message_capture("my_plugin", _capture)
    EngineDebugger.send_message("my_plugin:ping", ["test"])

func _capture(message, data):
    # Обратите внимание, что префикс «my_plugin:» здесь не используется.
    if message == "echo":
        prints("Echo received:", data)
        return true
    return false

Примечание: Во время работы игры @GlobalScope.print() и подобные функции, вызываемые в редакторе, ничего не печатают, в журнале вывода печатаются только игровые сообщения.

Методы

void

_breakpoint_set_in_tree(script: Script, line: int, enabled: bool) virtual

void

_breakpoints_cleared_in_tree() virtual

bool

_capture(message: String, data: Array, session_id: int) virtual

void

_goto_script_line(script: Script, line: int) virtual

bool

_has_capture(capture: String) virtual const

void

_setup_session(session_id: int) virtual

EditorDebuggerSession

get_session(id: int)

Array

get_sessions()


Описания метода

void _breakpoint_set_in_tree(script: Script, line: int, enabled: bool) virtual 🔗

Переопределите этот метод, чтобы получать уведомления при установке точки останова в редакторе.


void _breakpoints_cleared_in_tree() virtual 🔗

Переопределите этот метод, чтобы получать уведомления об очистке всех точек останова в редакторе.


bool _capture(message: String, data: Array, session_id: int) virtual 🔗

Переопределите этот метод для обработки входящих сообщений. session_id — это идентификатор EditorDebuggerSession, который получил message. Используйте get_session() для извлечения сеанса. Этот метод должен возвращать true, если сообщение распознано.


void _goto_script_line(script: Script, line: int) virtual 🔗

Переопределите этот метод, чтобы получать уведомления при щелчке по строке точки останова на панели точек останова отладчика.


bool _has_capture(capture: String) virtual const 🔗

Переопределите этот метод, чтобы включить получение сообщений от отладчика. Если capture — это "my_message", то сообщения, начинающиеся с "my_message:", будут переданы методу _capture().


void _setup_session(session_id: int) virtual 🔗

Переопределите этот метод, чтобы получать уведомления всякий раз, когда создается новый EditorDebuggerSession. Обратите внимание, что сеанс может быть неактивен на этом этапе.


EditorDebuggerSession get_session(id: int) 🔗

Возвращает EditorDebuggerSession с указанным id.


Array get_sessions() 🔗

Возвращает массив EditorDebuggerSession, в настоящее время доступный этому плагину отладчика.

Примечание: Сеансы в массиве могут быть неактивны, проверьте их состояние с помощью EditorDebuggerSession.is_active().