Anuncios

Bienvenidos sean a este post, el mecanismo de gancho de esta libreria nos permite registrar una funcion que sera llamada en eventos especificos cuando un programa se ejecuta, hay cuatro tipos de eventos que pueden disparar un gancho:

Anuncios
  • call, los eventos suceden cada vez que Lua llama una funcion
  • return, los eventos suceden cada vez que una funcion devuelve un resultado
  • line, los eventos suceden cuando Lua comienza la ejecucion de una nueva linea del codigo
  • count, los eventos suceden despues de un numero dado de instrucciones
Anuncios

Lua llama a los ganchos con un unico argumento, una cadena describiendo el evento que genero la llamada: “call”, “return”, “line” o “count”, para los eventos line tambien se pasa un segundo argumento, el numero de la nueva linea, para conseguir mas informacion dentro de un gancho debemos llamar a debug.getinfo.

Anuncios

Para registrar un gancho llamamos a debug.sethook con dos o tres argumentos:

  • El primer argumento es la funcion de gancho
  • El segundo argumento es una cadena que describe los eventos que queremos monitorear
  • El tercer argumento (opcional) es un numero que describe con que frecuencia queremos contar los eventos
Anuncios

Para monitorear los eventos call, return y line agregamos las primeras letras: ‘c‘,’r‘ y ‘l‘ en la cadena de la mascara, para monitorear el evento contar simplemente proveemos un contador como tercer argumento, para desactivar los ganchos, llamamos a sethook sin argumentos.

Anuncios

Nuestro siguiente codigo, aunque es un codigo simple, instala un rastreador primitivo la cual imprime cada linea que el interprete ejecuta:

debug.sethook(print, "l")
Anuncios

Esta llamada simplemente instala a print como la funcion gancho e instruye a Lua para llamarlo solo con los eventos de line, si lo probamos hace lo siguiente:

> print("algo")
line    1
algo
Anuncios

Un rastreador mas elaborado puede usar getinfo para agregar el nombre del archivo actual al rastro:

function rastro(evento, linea)
	local s = debug.getinfo(2).short_src
	print(s .. ":" .. linea)
end
Anuncios

Si lo ejecutamos de la siguiente forma sucede esto:

> debug.sethook(rastro, "l")
> rastro
stdin:1
Anuncios

En resumen, hoy hemos visto que son los ganchos, como son, para que se usan, como se configuran, que informacion nos devuelve, y como se puede optimizar, espero les haya sido util sigueme en Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.

Tengo un Patreon donde podes acceder de manera exclusiva a material para este blog antes de ser publicado, sigue los pasos del link para saber como.

Tambien podes donar

Es para mantenimiento del sitio, gracias!

$1.00