Skip to content

Debugger, VS Code e esecuzione nel cloud

Oltre al framework di test, NeoObjectPascal offre strumenti per investigare, modificare ed eseguire il codice su larga scala: un debugger interattivo (con modalità DAP per gli editor), un'estensione per VS Code e l'esecuzione remota nel cloud tramite NeoObjectPascalCloud. Questa guida presenta tutti e tre.

Debugger interattivo

Per eseguire il debug di un programma passo passo, avvialo con il flag -d (o --debug):

bash
java -jar neoobjectpascal.jar -d programa.npas

L'interprete apre un REPL interattivo in cui controlli l'esecuzione. I comandi principali:

ComandoAzione
b <linha>aggiunge un breakpoint alla riga
d <linha>rimuove il breakpoint dalla riga
listelenca i breakpoint attivi
c, continuecontinua fino al prossimo breakpoint
s, stepesegue la riga successiva (step over)
i, intoentra nella funzione chiamata (step into)
o, outesce dalla funzione corrente (step out)
p <var>stampa il valore di una variabile
varselenca tutte le variabili dello scope corrente
w <var>monitora (watch) le modifiche di una variabile
set <var> <valor>modifica il valore di una variabile a runtime
stackmostra lo stack delle chiamate
q, quittermina il debugger e il programma

Una sessione di esempio

Considera il programma seguente:

npas
var x: Integer;
var y: Integer;
var resultado: Integer;

begin
    x := 10;
    y := 20;
    resultado := x + y;
    WriteLn("resultado = ", resultado);
end.

Mettiamo un breakpoint sulla riga della somma, osserviamo x, ispezioniamo i valori e modifichiamo persino una variabile prima di continuare:

Saída
 debug> b 8 ✓ Breakpoint adicionado na linha 8 

debug> w x ✓ Watching variável: x

debug> c

⏸ PAUSADO na linha 8 resultado := x + y;

debug> p x x = 10 (tipo: INTEGER)

debug> vars Variáveis locais: x = 10 (tipo: INTEGER) y = 20 (tipo: INTEGER) resultado = null (tipo: INTEGER)

debug> set x 50 ✓ x = 50 (anterior: 10)

debug> c resultado = 70

Strategia dei breakpoint

Metti i breakpoint all'inizio dei loop, sulle condizioni if importanti, sulle chiamate di funzione e sui punti di ritorno. Combina w (watch) con s (step) per seguire esattamente quando e dove una variabile cambia.

Modalità DAP per gli editor

Per il debug grafico all'interno di un editor, l'interprete espone un server DAP (Debug Adapter Protocol) — lo stesso protocollo che VS Code e altri editor usano per i breakpoint visivi, l'ispezione delle variabili e il controllo passo passo:

bash
java -jar neoobjectpascal.jar --dap

In questa modalità l'interprete non esegue un REPL testuale: rimane in attesa che un client DAP (come VS Code) si connetta. Definisci i breakpoint facendo clic sul margine dell'editor, e usi i pulsanti di continua/step/ispeziona dell'interfaccia stessa. Di norma non avvii la modalità DAP a mano — lo fa per te l'estensione di VS Code.

Lo Step Into (F7) entra nel corpo dei metodi di classe e delle funzioni del tuo progetto — anche quando sono definiti in un altro file importato tramite uses —, aprendo il file e la riga corretti. La Call Stack mostra ogni frame dello stack (Classe.metodo, funzioni e main) con il relativo file e riga; la scheda Variables mostra le variabili locali del frame selezionato, incluso self all'interno di un metodo. Usa Step Over per eseguire una chiamata senza entrarci e Step Out per tornare al chiamante.

Debug in VS Code

Durante il debug da VS Code, l'output del programma (WriteLn) compare nella Debug Console mentre il programma è in esecuzione. La risoluzione dei moduli usa come radice la directory del programma, quindi effettuare il debug di un programma che fa uses cartella.modulo funziona come previsto. Tuttavia, l'input interattivo (ReadLn) NON è disponibile durante il debug — restituisce un valore predefinito. Per i programmi interattivi, usa Run invece del debugger.

Estensione di VS Code

L'estensione ufficiale per VS Code trasforma l'editor in un ambiente completo per NeoObjectPascal. Include:

  • Evidenziazione della sintassi per i file .npas e .test.npas.
  • Interprete integrato — l'estensione include il JAR impacchettato (in VS-Code-Extension/bin/), quindi non devi configurare manualmente il percorso dell'interprete.
  • Comandi per eseguire, testare ed eseguire il debug senza uscire dall'editor.

I comandi sono disponibili tramite la palette dei comandi (Cmd/Ctrl+Shift+P):

ComandoAzione
neoobjectpascal.runesegue il file .npas corrente
neoobjectpascal.debugavvia il debugger (tramite DAP) sul file corrente
neoobjectpascal.runTestesegue il file .test.npas corrente
neoobjectpascal.runAllTestsesegue tutti i test del progetto in modo ricorsivo
neoobjectpascal.buildgenera un eseguibile nativo (exe/app/bin) del progetto — vedi Creare eseguibili nativi

Esecuzione nel cloud

L'esecuzione nel cloud si effettua da riga di comando tramite il flag --execute-on-cloud dell'interprete (vedi la sezione qui sotto).

Flusso consigliato

Scrivi il codice con evidenziazione e completamento automatico, esegui neoobjectpascal.runTest per validare il file aperto, e usa neoobjectpascal.debug per seguire l'esecuzione con breakpoint visivi. Il tutto usando il JAR già incluso nell'estensione.

Esecuzione nel cloud

NeoObjectPascal si integra nativamente con NeoObjectPascalCloud, permettendo di eseguire un progetto su un server remoto con un unico comando. Questo è utile per condividere le esecuzioni tramite URL, mantenere lo storico dei log ed eseguire senza dipendere dall'ambiente locale.

Sintassi

bash
java -jar neoobjectpascal.jar --execute-on-cloud <url> <projeto> <usuario> <senha> <arquivo.npas>
ParametroDescrizione
<url>URL base dell'API del cloud (es.: http://localhost:8000)
<projeto>nome del progetto (cartella base)
<usuario>utente del cloud
<senha>password del cloud
<arquivo.npas>file principale da eseguire

Esempio

Dato il programma hello.npas:

npas
var mensagem: String;
var numero: Integer;

begin
    mensagem := "Olá do NeoObjectPascal Cloud!";
    numero := 42;

    WriteLn("=================================");
    WriteLn(mensagem);
    WriteLn("Número mágico: ", numero);
    WriteLn("=================================");
end.

Lo eseguiamo nel cloud:

bash
java -jar neoobjectpascal.jar \
  --execute-on-cloud \
  http://localhost:8000 \
  hello_project \
  usuario@email.com \
  senha123 \
  hello.npas

L'interprete si autentica, raccoglie tutti i file .npas della directory del progetto (mantenendo la struttura delle cartelle), effettua l'upload, avvia l'esecuzione remota e restituisce un link per seguire i log:

Saída
 🔐 Autenticando no cloud... ✓ Autenticado com sucesso! 

📁 Coletando arquivos do projeto... ✓ Encontrados 1 arquivo(s)

  • hello.npas

⬆️ Fazendo upload dos arquivos... [1/1] hello.npas ✓ Upload concluído!

🚀 Executando projeto no cloud... ✅ Projeto executado com sucesso!

🔗 Link da execução: http://localhost:8000/executions/123

Non esporre le password

Evita di passare la password direttamente nella riga di comando, perché rimane visibile nella cronologia della shell e nell'elenco dei processi. Preferisci le variabili d'ambiente:

bash
export CLOUD_PASSWORD="senha123"
java -jar neoobjectpascal.jar --execute-on-cloud \
  http://localhost:8000 meu_projeto usuario@email.com "$CLOUD_PASSWORD" main.npas

Progetti con più file

La raccolta è ricorsiva: se il progetto ha sottocartelle (helpers/, utils/), tutti i file .npas vengono rilevati e inviati automaticamente, preservando i percorsi relativi. Basta indicare il file principale nel comando.

Prossimi passi

Ora conosci i tre strumenti di investigazione ed esecuzione di NeoObjectPascal. Per consultare la sintassi completa del linguaggio in un unico posto, prosegui verso il Riferimento del linguaggio.