EditorDebuggerPlugin

继承: RefCounted < Object

实现调试器插件的基类。

描述

EditorDebuggerPlugin提供与调试器编辑器端相关的功能。

要与调试器交互,必须通过EditorPlugin.add_debugger_plugin()将此类的实例添加到编辑器中。

一旦添加,将为插件可用的每个EditorDebuggerSession调用_setup_session()回调,并且在创建新编辑器调试器会话时(在此阶段会话可能处于非活动状态)。

您可以通过get_sessions()检索可用的EditorDebuggerSession,或者通过get_session()获取特定的某个。

@tool
extends EditorPlugin

class ExampleEditorDebugger extends EditorDebuggerPlugin:

    func _has_capture(capture):
        # 如果您希望处理前缀为"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)

To connect on the running game side, use the EngineDebugger singleton:

extends Item

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是接收messageEditorDebuggerSession的ID。使用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) 🔗

返回具有给定idEditorDebuggerSession


Array get_sessions() 🔗

返回此调试器插件当前可用的EditorDebuggerSession数组。

注意:数组中的会话可能处于非活动状态,请通过EditorDebuggerSession.is_active()检查它们的状态。