2011-12-07 16 views
11

La mia azienda ha un programma che utilizza Lua incorporato nel suo runtime, carica i file .lua dal disco ed esegue le funzioni definite in essi ripetutamente.Lua Debugger che può allegare al processo

C'è un modo per connettersi al processo in esecuzione e impostare punti di interruzione nei miei file .lua? (mi piacerebbe accettare sia il debug della riga di comando gdb-stile come parte della distribuzione Lua, o forse un IDE di terze parti che fornisce visivo-Studio-come i punti di interruzione GUI.)

O è quello che sto chiedendo del tutto privo di senso e impossibile data la natura del runtime che carica file casuali dal disco?

Edit: Sembra che non è privo di senso, dal momento che proprio la funzione di Lua debug.getinfo() in grado di determinare il file di origine per una determinata funzione, e debug.sethook() consente una funzione di callback per ogni nuova linea di codice inserito. Quindi, è ragionevole caricare il codice sorgente dal disco ed essere in grado di dire quando l'interprete sta eseguendo una particolare riga di codice da quel file. La domanda rimane: come faccio a fermo su un processo esistente che ha un interprete Lua e iniettare la mia funzione trace (che possono poi guardare per file/coppie di numeri di linea e di sospendere l'esecuzione)?

risposta

4

Si tratta di un'alternativa che uso dopo molte ricerche. Se hai un eseguibile esterno che carica lua, ho funzionato in pochi minuti. L'op è molto reattivo, ha un debugger interattivo che carica il tuo codice e puoi posizionare i punti di debug in modo interattivo. Non ha un editor, ma io uso l'editor di scite o cremisi e avvio l'eseguibile, una riga nel tuo modulo lua principale abilita il debugger.

http://www.cushy-code.com/grld/ - questo link sembra morto

mi sono trasferito a eclipse.org/ldt ha un IDE e debugger integrato, consigliato

hth

+0

Mi sono spostato su http://www.eclipse.org/koneki/ldt/ ha un ide e debugger integrato, consigliato – daven11

+0

Il link sopra è morto. –

9

Se è possibile modificare i file .lua, è possibile inserire la seguente chiamata appena prima di tutto il necessario per eseguire il debug:

require 'remdebug.engine'.start() 

Si parte il motore debugger RemDebug Lua e cerca di connettersi a un controller. Se non riesce a connettersi, continuerà a funzionare normalmente. Ho fatto some fixes al motore debugger, come ad esempio si tratta di variabili temporanee, e il mio allievo sta lavorando su una GUI debugger (prevista per il prossimo anno).

Nel frattempo, si può provare se Lua Development Tools lavori per voi. È dotato di un debugger simile a RemDebug, che dovrebbe essere possibile impostare come segue:

require("debugger")(host, port, idekey) 

In alternativa, è possibile utilizzare SciTE-debug, che è un'estensione per l'editor SciTE, e può servire come un controller per RemDebug. Basta fare in modo di inserire la chiamata a remdebug.engine.start da qualche parte nel codice Lua e inserire questo nella finestra di output SciTE:

:debug.target=remote.lua 

Quando si avvia il programma, SciTE dovrebbe mostrare l'origine e la riga corrente.

5

Sto usando Decoda redattore per questo.Ti consente di collegarti a un'applicazione C++ in esecuzione, dopo di che rileva che stai eseguendo un Lua Interpreter all'interno del tuo codice C++ e mostra il tuo codice sorgente Lua, dove puoi aggiungere becchi puntuali e ispezionare le variabili come al solito.

1

Probabilmente si dovrebbe usare Decoda.
Passare a Debug -> Processes -> Attach per allegare il processo. Questo dovrebbe funzionare bene.

2

Il Lua plugin for IntelliJ ha un debugger funzionante senza alcuna configurazione speciale richiesta oltre a puntare al proprio interprete Lua.

Ecco uno screencast di esso:

http://www.screencast.com/t/CBWIkoZPg

+1

Posso eseguire il debug di cose semplici in questo modo, ma non riesco a capire come eseguire il debug dei test di unità "busted". Qualche consiglio? –

3

Simile a quello che Michal Kottman descritto, ho implementato un debugger basato su RemDebug, ma con correzioni e funzioni aggiuntive (su GitHub: https://github.com/pkulchenko/MobDebug).

È possibile aggiornare il file .lua con require("mobdebug").start("localhost", 8171) nel punto in cui si desidera avviare il debug. È quindi possibile utilizzare il debugger della riga di comando per eseguire comandi, impostare punti di interruzione, valutare/eseguire espressioni e così via.

In alternativa, è possibile utilizzare ZeroBrane Studio IDE, che si integra con il debugger e fornisce un front-end per caricare il codice ed eseguire gli stessi comandi del debugger in una bella GUI. Se vuoi vedere l'IDE in azione, ho qui una semplice demo: http://notebook.kulchenko.com/zerobrane/live-coding-in-lua-bret-victor-style.

-1

Bene il modo più semplice è questo, grazie al genio dell'autore https://github.com/slembcke/debugger.lua

non è necessario configurare un server di debug remoto, basta richiedere un file, e la chiamata simplely DBG() e per mettere in pausa, proprio come gdb

un tutorial è anche spedito con esso, check it out.

Problemi correlati