Red de conocimiento informático - Conocimiento informático - Cómo leer el código luajit

Cómo leer el código luajit

¿Por qué leer el código fuente de luajit?

Como uno de los lenguajes de programación más rápidos, luajit es de hecho una obra maestra, pero en comparación con lua nativo, que tiene solo decenas de miles de líneas de código, se puede decir que luajit ser un gigante. Lo que es peor es que la razón por la que luajit es rápido es el uso extensivo de tecnologías relacionadas con el código de máquina, incluida la parte de compilación del código de máquina y la parte de ejecución del código de bytes, las cuales son difíciles de leer.

Hay muy poca información sobre esto en Internet. Incluso Cloudbreeze de la comunidad lua se centra principalmente en analizar lua local, que es muy diferente de luajit. Si tiene un problema de rendimiento u otro problema difícil y necesita descubrir la causa y no puede leer el código fuente, debe confiar en las conclusiones de otros en Internet; de lo contrario, no tendrá forma de comenzar.

Depurar luajit

Todo es difícil al principio, primero debes poder depurar tu propio código

El código que se puede depurar se leerá mucho más claramente que parece.

Además, si puede utilizar Visual Studio para depurar, leer luajit sigue siendo útil. Después de todo, con la ayuda de la función de búsqueda de código de Visual Assist, puede ayudarle a encontrar rápidamente lo que desea saber. Contenido

El siguiente luajit proporciona un msvcbuild.bat para compilar luajit, pero si necesita depurarlo, puede realizar los siguientes pasos:

1 Descomprimir luajit, por ejemplo. Directorio LuaJIT-2.1.0-beta2_msvc

2. Si desea obtener la pila precisa, modifique LuaJIT-2.1.0-beta2_msvc\src\msvcbuild.bat, busque /O2, cambie /O2. bat, busque /O2, cambie /O2 a /Od

3 En la versión win64 de la línea de comando de Visual Studio, ejecute msvcbuild.bat debug una vez, esta vez generará luajit.exe, pruebe exe. ¿Es normal?

4. Utilice Visual Studio para crear el proyecto de línea de comando, por ejemplo, guarde el proyecto como LuaJIT-2.1.0-beta2_msvc\luajitcmd

5. -beta2_msvc\ Todo el código .h y .c en src se agrega al proyecto

6. Establezca la ruta de depuración del proyecto en

Comando: $(ProjectDir)... \... \src\luajit.exe

Directorio de trabajo: $(ProjectDir)...\...

7 En este momento, generalmente puede presionar el punto de interrupción f5. depurar

¿En cuanto a qué se puede depurar?

El método más simple es escribir un archivo lua, ejecutar el código que contiene y luego observar el comportamiento de luajit con puntos de interrupción.

Cabe señalar aquí que hay dos partes del proceso de ejecución de luajit que no tienen correspondencia .c:

1. Parte del código se genera a través de la herramienta dasm. , que se genera directamente a través del ensamblaje. Sí, no hay .c, por lo que no hay forma de depurar en Visual Studio (en realidad es posible, pero solo depuración de ensamblaje). Estos son principalmente códigos de máquinas virtuales Lua (sí, por razones de velocidad, el autor escribe la máquina virtual Lua en ensamblaje manual)

2.luajit compilará algunos códigos en una máquina altamente optimizada a través del módulo jit Código, estos también son códigos de máquina ejecutables generados temporalmente. Solo puedes ver cómo se generan en .c. Por supuesto, la fase de ejecución no corresponde a c.

Además, casi todo se puede comparar directamente con la depuración: todos los procesos de compilación, todas las bibliotecas y API estándar de Lua, estructuras de datos regulares (como luatables, perfiladores, etc.)

En el siguiente paso, presentaremos brevemente la estructura del código y algunos principios básicos de luajit para explicar cómo leerlo

Especialmente los principios de luajit, si no los entiende, lea El código fuente es muy difícil Porque Luajit toma muchos pasos desde la compilación hasta la ejecución, abarca múltiples módulos e involucra tres formas de codificación diferentes (código de bytes, SSA IR, código de máquina), lo que muestra su complejidad.