调试Lua源码的方法
Visual Studio 调试
-
首先从Lua官网下载Lua源码,下载完解压到本地
-
打开Visual Studio创建新项目,项目模板选用:
-
右键解决方案添加现有项,将Lua解压后Src下的文件添加进去
-
将lua.c 和luac.c 中的main方法注释掉
-
右键解决方案打开 属性,在附加包含目录里面添加 源码所在目录
- 右键解决方案打开 属性,在预处理器定义里面添加 _CRT_SECURE_NO_DEPRECATE
- 添加自己用来测试的文件main.c
#include <stdio.h>
#include <lua.h>
#include <lualib.h>
#include <lauxlib.h>
int main()
{
printf("debug lua");
lua_State* L = luaL_newstate(); // 启动lua虚拟机
luaL_openlibs(L);
luaL_dofile(L, "test.lua"); // 执行目标lua文件
lua_close(L);
return 0;
}
- 在需要测试的地方添加断点开始调试
查看Lua字节码
使用luac.exe可以将lua文件编译成二进制形式,然后可以将二进制文件反编译成字节码的形式来查看。
lua二进制文件由两部分构成:文件头块和顶层函数块。文件头块为12字节,存放的是整个文件的一些格式信息。顶层函数块存放的lua的全局变量和内嵌函数等信息。
查看字节码的方式:
- 打开命令行,使用luac -o [目标文件名] [源lua文件名]这条命令生成二进制文件,比如我有一个名为test.lua的文件,内容为:
a = 5
b = 10
c = a +b
print(c)
然后使用 luac -o test.out test.lua,即可生成比编译后的名为test.out的二进制文件。注意lua虚拟机是可以直接运行二进制文件的,因为lua内部当发现加载的文件是lua二进制文件后会反编译成字节码然后加载执行。比如当我使用以下命令执行test.out时,就会打印15:
- 使用luac -l 命令即可查看lua二进制文件对应的字节码:
使用luac -l -l 可以查看更为详细的信息:
关于luac编译器的详细命令信息可查看 luac main page