2013-04-25 14 views
6

Ho appena giocato un po 'con Lua e ho provato il plugin di eclissi Koneki, che è abbastanza carino. Il problema è che quando apporto le modifiche in una funzione sto eseguendo il debug nel momento in cui le modifiche non diventano effettive quando si salvano le modifiche. Quindi sono costretto a riavviare l'applicazione. Sarebbe così bello se potessi apportare modifiche al debugger e diventerebbero effettivi al volo come ad esempio con Smalltalk o in parte come nella sostituzione di hot code in Java. Qualcuno ha idea se questo è possibile?Modo di scrivere il codice "nel debugger" in Lua?

risposta

5

È possibile in qualche misura con alcune limitazioni. Ho sviluppato un IDE/debugger che fornisce questa funzionalità. Ti dà accesso a una console remota per eseguire comandi nel contesto/ambiente della tua applicazione in esecuzione. L'IDE supporta anche live coding, che ricarica il codice modificato mentre si apportano modifiche ad esso; vedere le demo here.

Il limite principale è che non è possibile modificare una funzione in esecuzione (almeno senza modifiche a Lua VM). Ciò significa che l'effetto delle modifiche apportate alla funzione attualmente in esecuzione verrà visualizzato solo dopo aver chiuso e reinserito tale funzione. Funziona bene per ambienti che chiamano ripetutamente la stessa funzione (ad esempio un motore di gioco che chiama lo draw), ma potrebbero non funzionare nel tuo caso.

Un'altra sfida riguarda gli upvalues ​​(valori creati al di fuori della funzione e riportati all'interno). Esistono metodi per "leggere" gli upvalues ​​correnti e ricrearli quando viene creata la funzione (nuova), ma richiede alcune analisi del codice per trovare quali funzioni verranno ricreate per interrogarle per i valori aggiornati, per ottenere i valori correnti e quindi per creare un nuovo ambiente con questi valori e assegnare loro valori corretti. La mia attuale implementazione non lo fa, il che significa che è necessario utilizzare le variabili globali come soluzione alternativa.

C'era anche relevant discussion proprio l'altro giorno sulla mailing list Lua.

+0

Risposta perspicace, Paul. Grazie. – OlliP

+0

Penso che la ragione per cui funziona in Smalltalk sia perché l'intero codice è un'istantanea binaria (in Smalltalk chiamata "immagine") che è interamente in memoria (le librerie di collegamento Smalltalk sono arrivate molto più tardi quando Kava era già lì). Quindi credo che Smalltalk sembra essere l'unica lingua in cui puoi farlo. Piuttosto un peccato ... – OlliP

Problemi correlati