2011-03-25 29 views
13

Estoy buscando la mejor manera de depurar Lua de forma remota (como desde un navegador web).¿Cómo se puede depurar Lua de forma remota?

Vi RemDebug, pero la última actualización del proyecto se realizó en 2006. Funciona con Lua 5.0 y 5.1, pero Lua 5.2 está bastante cerca, y no veo RemDebug para obtener una actualización pronto.

Podría montar un pequeño servidor web incorporado en mi host de depuración, y usar algo como RemDebug para comunicarme con él, y realizar la depuración remota a través de HTTP.

Se agradecen las sugerencias.

+0

No estoy seguro de entender por qué necesita un cliente basado en el navegador web. ¿Es bueno para usted un cliente que se basa en un depurador completo? –

+0

Hola, trabajo en Game Development, necesito algo genérico que pueda compilar y ejecutar en varias arquitecturas. Hacer un cliente basado en navegador web sería ideal para mí. – Goles

Respuesta

1

No estaba seguro de si necesita depurar lua de forma remota o si desea hacerlo a través de HTTP; Estoy respondiendo sobre lo primero y no tengo conocimiento de una forma de hacerlo a través de HTTP.

Tanto LuaEdit como Decoda le permiten conectarse de forma remota a un script lua en ejecución (ambos en un proceso diferente en la misma máquina y en una máquina remota).

Decoda puede hacer magia y hacerlo para una VM lua sin requerir ningún cambio en la máquina virtual; con LuaEdit debe crear la máquina virtual de una manera específica, utilizando una DLL o biblioteca proporcionada.

+0

Esto no está basado en la web ... Estoy pensando en desarrollar el cliente basado en web, pero necesitaría algunos consejos. – Goles

1

No estoy seguro si esto es correcto. Creo que sirve sin embargo:

Fuente: http://www.keplerproject.org/remdebug/example.html

Este es un ejemplo de una sesión de depuración de la siguiente secuencia de comandos (test.lua):

1 require"remdebug.engine" 
2 
3 remdebug.engine.start() 
4  
5 local tab = { 
6  foo = 1, 
7  bar = 2 
8 } 
9 
10 print("Start") 
11 
12 function bar() 
13  print("In bar 1") 
14  print("In bar 2") 
15 end 
16 
17 for i = 1, 10 do 
18  print("Loop") 
19  bar() 
20  tab.foo = tab.foo * 2 
21 end 
22 
23 print("End") 

ejecuta por primera vez el controlador RemDebug:

% lua50 controller.lua Lua Remote Debugger Ejecute el programa que desea depurar En este momento puede ejecutar su programa de destino (en otra ventana):

% lua50 test.lua Ahora vuelve a la ventana donde ejecutó controller.lua (esto supone que se está ejecutando en el interior test.lua C: \ desarrollo \ Kepler en un sistema Windows):

detuvo en archivo C: /development/kepler/test.lua tipo de 'ayuda' para los comandos

basedir C: Nuevo directorio base/desarrollo/Kepler/ es C:/desarrollo/Kepler/ basedir C:/desarrollo/kepler/ paso Pausado en el archivo C : /development/kepler/test.lua línea 6 sobre detuvo en archivo C: /development/kepler/test.lua línea 7 sobre detuvo en archivo C: /development/kepler/test.lua línea 10 sobre En pausa en el archivo C: /development/kepler/test.lua línea 15 setb test.lua 19 ejecutar Puede cambiar a la ventana de la aplicación en cualquier momento para ver su salida. Volver a la sesión del depurador:

Pausado en el archivo C:/development/kepler/test.línea lua 19

carrera detuvo en archivo C: /development/kepler/test.lua línea 19 tab.foo eval tab.bar eval exec old_tab = pestaña nil pestaña exec = 2 nil pestaña eval pestaña exec = old_tab nil tab.foo eval carrera detuvo en archivo C: /development/kepler/test.lua línea 19 eval tab.foo delb test.lua 19 setw tab.foo == 32 Reloj insertado exp no. 1 carrera detuvo en archivo C: /development/kepler/test.lua línea 17 (reloj expresión 1: [tab.foo = 32]) tab.foo eval delw 1 la ejecución del programa terminado

+1

En la pregunta original, especifiqué que vi RemDebug, pero Lua 5.2 está bastante cerca, y no veo RemDebug para obtener una actualización pronto. Realmente no veo esto como una respuesta adecuada a mi pregunta. – Goles

0

no sé para la depuración de navegador web (la idea parece extraño para mí, tal vez usted puede detallar por qué se necesita un depurador de navegador web?)

para un autónomo debu Sin embargo, he escrito un depurador remoto con GUI: http://cushy-code.com/grld

Se comunica con el programa depurado con la API de socket, por lo que cualquier conexión de red funcionará, sin necesidad de HTTP.

Espero que esto ayude.

+2

Bueno, esto suena muy interesante, pero necesito una solución de código abierto para entender cómo hacerlo. (La pregunta es "cómo depurar lua de forma remota") Gracias. – Goles

10

He desarrollado un nuevo depurador basado en RemDebug (MobDebug) con nuevos comandos, nuevas funciones, correcciones de errores e integración con IDEs.

MobDebug se basa en la interacción TCP entre el cliente (debug) y el servidor (controlador). Este es también el caso de RemDebug y la mayoría de los otros depuradores remotos. Es posible que pueda ejecutar sobre otra cosa (como WebSockets o HTTP), pero aún necesita poder ejecutar coroutines y depurar enlace para controlar la aplicación que se está depurando.

La arquitectura del proceso de depuración es bastante simple:

  • tiene una aplicación desea depurar
  • También tienen el depurador con un controlador
  • La aplicación carga los componentes de cliente de la depurador, que abre una conexión al controlador
  • El controlador acepta comandos desde una línea de comandos o un IDE (MobDebug proporciona ambos; se integra con ZeroBraneStudio y también proporciona una forma de secuencia de comandos para ejecutarlo)
  • Cuando se carga la aplicación, el depurador instala un enlace de depuración que se ejecuta en cada línea/llamada/retorno. Desde este enlace de depuración, se realiza una llamada de reanudación al depurador, que luego puede ejecutar comandos desde el controlador (como instalar un punto de interrupción, evaluar una expresión, etc.). Cuando se envía el siguiente comando ejecutable (como ejecución o paso), el depurador regresa al gancho, que luego vuelve a la aplicación, lo que le permite continuar.

Es posible imitar la interfaz de socket existente (ya que solo está utilizando connect/send/receive y seleccionar/timeout para cancelar la aplicación) y reutilizar la mayor parte de la biblioteca. Todavía no estoy seguro de por qué querrías ejecutar esto en un navegador, ya que puedes ejecutar la aplicación en cualquier cosa que soporte TCP ya (tengo un prototipo funcional depurando una aplicación que se ejecuta en un dispositivo móvil desde mi escritorio).

+0

Me gusta mucho lo que veo aquí ... ¡Lo probaré! – Goles

+0

¡Su depurador se ve genial! ¿Hay un tutorial para principiantes (ya he visto la carpeta de ejemplos)? Algunas cosas no se explican por sí mismas y la "ayuda" no es tan exhaustiva. – Atcold

+0

@Atcold, es posible que desee comprobar [este resumen] (http://studio.zerobrane.com/doc-lua-debugging) y otros [enlaces relacionados con la depuración] (http://studio.zerobrane.com/documentation) .html # depuración). Son desde la perspectiva de un usuario del IDE, pero como toda esa funcionalidad se basa en lo que proporciona MobDebug, puede brindarle información adicional sobre cómo funciona. –

Cuestiones relacionadas