EditorDebuggerPlugin
Успадковує: RefCounted < Object
Базовий клас для реалізації плагінів debugger.
Опис
EditorDebuggerPlugin надає функції, пов’язані з редактором налагоджувача.
Щоб взаємодіяти з налагоджувачем, екземпляр цього класу потрібно додати до редактора за допомогою EditorPlugin.add_debugger_plugin().
Після додавання зворотний виклик _setup_session() буде викликатися для кожного EditorDebuggerSession, доступного для плагіна, а також під час створення нових (сеанси можуть бути неактивними на цьому етапі).
Ви можете отримати доступні EditorDebuggerSession за допомогою get_session() або отримати певний за допомогою get_session().
@інструмент
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" # Буде використано як заголовок вкладки.
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("Ехо отримано:", дані)
return true
return false
Примітка: Під час роботи гри @GlobalScope.print() і подібні функції, викликані в редакторі нічого не друкують, вихідний журнал друкує лише повідомлення гри.
Методи
void |
_breakpoint_set_in_tree(script: Script, line: int, enabled: bool) virtual |
void |
_breakpoints_cleared_in_tree() virtual |
_capture(message: String, data: Array, session_id: int) virtual |
|
void |
_goto_script_line(script: Script, line: int) virtual |
_has_capture(capture: String) virtual const |
|
void |
_setup_session(session_id: int) virtual |
get_session(id: int) |
|
Описи методів
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.
Повертає масив EditorDebuggerSession тепер доступний для цього плагіна.
Note: Сесія в масиві може бути неактивним, перевірити стан через EditorDebuggerSession.is_active().