Attention: Here be dragons

This is the latest (unstable) version of this documentation, which may document features not available in or compatible with released stable versions of Godot.

EditorDebuggerPlugin

Eredita: RefCounted < Object

Una classe di base per implementare estensioni del debugger.

Descrizione

EditorDebuggerPlugin fornisce funzioni riguardo il debugger dal lato dell'editor.

Per interagire con il debugger, un'istanza di questa classe deve essere aggiunta all'editor tramite EditorPlugin.add_debugger_plugin().

Una volta aggiunta, il callback _setup_session() verrà chiamato per ogni EditorDebuggerSession disponibile per il plugin e quando ne vengono create di nuove (le sessioni potrebbero essere inattive durante questa fase).

È possibile recuperare le EditorDebuggerSession disponibili tramite get_sessions() o ottenerne una specifica tramite get_session().

@tool
extends EditorPlugin

class ExampleEditorDebugger extends EditorDebuggerPlugin:

    func _has_capture(prefix):
        # Restituisci true se desideri gestire il messaggio con questo prefisso.
        return prefix == "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):
        # Aggiunge una nuova scheda nell'interfaccia utente della sessione del debugger contenente un'etichetta.
        var label = Label.new()
        label.name = "Example plugin"
        label.text = "Example plugin"
        var session = get_session(session_id)
        # Ascolta i segnali di avvio e arresto della sessione.
        session.started.connect(func (): print("Session avviata"))
        session.stopped.connect(func (): print("Sessione arrestata"))
        session.add_session_tab(label)

var debugger = ExampleEditorDebugger.new()

func _enter_tree():
    add_debugger_plugin(debugger)

func _exit_tree():
    remove_debugger_plugin(debugger)

Per connettersi dal lato del gioco in esecuzione, usa il singleton EngineDebugger:

extends Node

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

func _capture(message, data):
    # Nota che il prefisso "my_plugin:" non è utilizzato qui.
    if message == "echo":
        prints("Eco ricevuto:", data)
        return true
    return false

Nota: Mentre il gioco è in esecuzione, @GlobalScope.print() e funzioni simili chiamate nell'editor non stampano nulla, il log di output stampa solo i messaggi del gioco.

Metodi

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()


Descrizioni dei metodi

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

Sovrascrivi questo metodo per essere notificato quando viene impostato un punto d'interruzione nell'editor.


void _breakpoints_cleared_in_tree() virtual 🔗

Sovrascrivi questo metodo per essere notificato quando tutti i punti d'interruzione vengono cancellati nell'editor.


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

Sovrascrivi questo metodo per elaborare i messaggi in arrivo. Il session_id è l'ID dell'EditorDebuggerSession che ha ricevuto il messaggio. Usa get_session() per recuperare la sessione. Questo metodo dovrebbe restituire true se il messaggio viene riconosciuto.


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

Sovrascrivi questo metodo per essere notificato quando viene cliccata una riga con un punto d'interruzione nel pannello dei punti d'interruzione del debugger.


bool _has_capture(capture: String) virtual const 🔗

Sovrascrivi questo metodo per abilitare la ricezione di messaggi dal debugger. Se capture è "my_message", i messaggi che iniziano con "my_message:" saranno passati al metodo _capture().


void _setup_session(session_id: int) virtual 🔗

Sovrascrivi questo metodo per essere notificato ogni volta che viene creato un nuovo EditorDebuggerSession. Nota che la sessione potrebbe essere inattiva durante questa fase.


EditorDebuggerSession get_session(id: int) 🔗

Restituisce l'EditorDebuggerSession con il id fornito.


Array get_sessions() 🔗

Restituisce un array di EditorDebuggerSession attualmente disponibili per quest'estensione del debugger.

Nota: Le sessioni nell'array potrebbero essere inattive, controlla il loro stato tramite EditorDebuggerSession.is_active().