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:
- 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
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.
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
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.
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")
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
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
Si lo ejecutamos de la siguiente forma sucede esto:
> debug.sethook(rastro, "l")
> rastro
stdin:1
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