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
È 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.
- 1. Avvia debugger nel codice
- 2. Perché il codice Java rallenta nel debugger?
- 3. Ignorare il codice sorgente nel debugger
- 4. Codice indentazione Lua in Lua
- 5. Lua Debugger che può allegare al processo
- 6. modifica del codice Python nel debugger
- 7. in C# esiste un modo, nel debugger, per eliminare un'eccezione dall'interruzione nel debugger?
- 8. Il debugger non entra nel codice sorgente MFC
- 9. Come scrivere questa espressione regolare in Lua?
- 10. Arresta il debugger sulla riga corrente di codice in esecuzione
- 11. Come scrivere un simbolo Unicode in lua
- 12. Il debugger di Eclipse non riconosce il nuovo codice java
- 13. Il modo più veloce per scrivere enormi dati nel file
- 14. Codice Lua "tester"
- 15. Sospeso nel debugger in chrome?
- 16. Come scrivere il valore della stringa JSON nel codice?
- 17. Eclipse Android Debugger - Dove nel mio codice ho causato l'eccezione?
- 18. È possibile ottenere il debugger di Internet Explorer per entrare nel codice JavaScript di lunga durata?
- 19. È possibile utilizzare il codice lua in Unity3D
- 20. Come chiamare metodi o eseguire codice nel debugger LLDB?
- 21. Come scrivere più righe di codice nel Nodo REPL
- 22. Posso modificare il codice Javascript nel debugger di Internet Explorer 11?
- 23. Come si entra nel debugger dal codice sorgente Python?
- 24. Gson lento nel debugger di Android Studio
- 25. come scrivere javascript in asp.net nel codice dietro usando C#
- 26. Come inserire in modo sicuro il codice nel database mySQL
- 27. Il programma si blocca nel debugger di Visual Studio
- 28. Controllo il contenuto di un array nel debugger Xcode
- 29. Consigli per Lua IDE e debugger su Windows
- 30. Qual è il modo migliore per riutilizzare il parser Lua?
Risposta perspicace, Paul. Grazie. – OlliP
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