Latest web development tutorials

Lua depuración (depuración)

Lua ofrece la biblioteca de depuración para proporcionar a crear un convertidor funciona personalizado. Lua en sí no tiene un gobernador incorporado, pero muchos desarrolladores compartir su gobernador código Lua.

Lua en la biblioteca de depuración incluye las siguientes funciones:

sethook ([hilo,] gancho, máscara [, count]):
No. Método y Propósito
1. debug ():

Entrar en un modo interactivo con el usuario, se ejecuta cada cadena introducida por el usuario. El uso de comandos simples y otros valores de depuración, el usuario puede revisar las variables globales y locales, cambiar los valores de las variables para calcular una serie de expresiones, y así sucesivamente.
línea de entrada de cadena que contiene sólo cont pondrá fin a esta función, de modo que la persona que llama puede seguir circulando hacia abajo.

2. getfenv (objeto):

Object variable de entorno.

3. gethook (rosca opcional):

Las devoluciones representan tres sets ganchillo del hilo: la función actual de gancho, gancho de la máscara actual, y el recuento actual de gancho

4. getinfo ([hilo,] f [ , lo]):

Información sobre la función devuelve una tabla. Puede proporcionar esta función, también puede utilizar una representación digital de la función f. función digital f representa que se ejecuta en la pila de llamadas del subproceso especificado correspondiente a los niveles: nivel 0 indica la función actual (getinfo sí mismo); 1 capa indica que la función de llamada getinfo (a menos que sea el final de la llamada, esta situación no está incluido en la pila); etc. . Si f es una función del número de actividades que el número más grande, getinfo devuelve nil.

5. debug.getlocal ([hilo,] f, local):

Esta función devuelve el nombre y el valor del índice de la pila de capas función f para las variables locales locales. Esta función sólo se utiliza para acceder a las variables locales definidas de forma explícita, como los parámetros, variables temporales.

6. getmetatable (valor):

Los índices puntos dados a los valores de elementos de tabla en la pila. Si el índice no es válido, o el valor del yuan hay una mesa, la función devuelve 0 y no empuja nada a la pila.

7. getregistry ():

tabla de registro de nuevo, lo que está fuera de una tabla predefinida se puede utilizar para guardar cualquier código C que desea guardar el valor Lua.

8. getupvalue (f, a)

Esta función devuelve los nombres y valores de la función f la primera en levantarse en valores. Si no lo hace en ese valor, devuelve cero.
En '(' (paréntesis abierto) representan el nombre de la variable comienza con ningún nombre de variable (excepto para depurar la información de bloque de código).

10. Funcionará como un gancho configurado en. máscara de cuerda y el recuento digital determina el gancho será llamado cuando. La máscara es una combinación de los siguientes caracteres en una cadena, cada personaje tiene su propio significado:

  • ' c ': Siempre que Lua llama a una función, llame al gancho;
  • ' r ': cada vez que Lua retorna de una función se llama cuando el gancho;
  • ' l ': cada vez que Lua entra en una nueva línea, llame al gancho.
11. setlocal (nivel [hilo,], locales, valor):

Esta función será el primer valor local asignado a la función de capa de nivel variable local de primera pila. Si usted no tiene esa variable, la función devuelve nil. Si el nivel transfronterizo, emitirá un error.

12. setmetatable (valor, tabla):

El valor de la mesa de juego de mesa de elemento (puede ser nulo). Valor de retorno.

13. setupvalue (f, arriba, valor) :

Esta función primera configurar un valor en el valor de la función f. Si usted no tiene esa función en un valor, devuelve nil de lo contrario, devuelve el nombre de los valores anteriores.

14. rastreo ([hilo,] [mensaje [nivel]]):

Si usted tiene un mensaje, y no una cadena o nulo, la función sin ningún tratamiento directamente de nuevo mensaje. De lo contrario, se devuelve la información de rastreo posterior de pila pila de llamadas. cadena de mensaje opcional se añade al comienzo de la información de la pila de rastreo. Opciones digitales especificado nivel a partir del cual comenzó pila de capas vuelta hacia atrás (por defecto es 1, que llama en el rastreo de).

La mesa es nuestra función de depuración común, entonces podemos ver algunos ejemplos sencillos:

function myfunction ()
print(debug.traceback("Stack trace"))
print(debug.getinfo(1))
print("Stack trace end")
	return 10
end
myfunction ()
print(debug.getinfo(1))

Ejecutar los resultados de la salida el código de seguridad:

Stack trace
stack traceback:
	test2.lua:2: in function 'myfunction'
	test2.lua:8: in main chunk
	[C]: ?
table: 0054C6C8
Stack trace end

En el ejemplo, se utiliza el rastreo y GetInfo funciones de la biblioteca de depuración, getinfo función devuelve una información de función de tabla.

Otro ejemplo

Con frecuencia tenemos que depurar las variables locales dentro de una función. Podemos utilizar la función getupvalue para establecer estas variables locales. Ejemplos son los siguientes:

function newCounter ()
  local n = 0
  local k = 0
  return function ()
    k = n
    n = n + 1
    return n
    end
end

counter = newCounter ()
print(counter())
print(counter())

local i = 1

repeat
  name, val = debug.getupvalue(counter, i)
  if name then
    print ("index", i, name, "=", val)
	if(name == "n") then
		debug.setupvalue (counter,2,10)
	end
    i = i + 1
  end -- if
until not name

print(counter())

Ejecutar los resultados de la salida el código de seguridad:

1
2
index	1	k	=	1
index	2	n	=	2
11

En el ejemplo anterior, el contador se incrementa cada vez que una llamada 1. Los ejemplos que utilizan la función getupvalue para ver el estado actual de las variables locales. Podemos establecer una variable local a un nuevo valor. Ejemplo, antes de n es 2, utilice la función setupvalue colocó a 10. Ahora llamamos a la función después de la ejecución de la salida es de 11 en lugar de 3.


Tipo de depuración

  • depurador de línea de comandos
  • depurador gráfico

De línea de comandos depurador tiene: RemDebug, clidebugger, ctrace, xdbLua, LuaInterface - Depurador, Rldb, ModDebug.

depurador interfaz gráfica tiene: SciTE, Decoda, ZeroBrane de estudio, akdebugger, LuaEdit.