调试Lua源码的方法

Visual Studio 调试

  1. 首先从Lua官网下载Lua源码,下载完解压到本地

  2. 打开Visual Studio创建新项目,项目模板选用:
    在这里插入图片描述

  3. 右键解决方案添加现有项,将Lua解压后Src下的文件添加进去
    在这里插入图片描述

  4. 将lua.c 和luac.c 中的main方法注释掉

  5. 右键解决方案打开 属性,在附加包含目录里面添加 源码所在目录

在这里插入图片描述
  1. 右键解决方案打开 属性,在预处理器定义里面添加 _CRT_SECURE_NO_DEPRECATE
在这里插入图片描述
  1. 添加自己用来测试的文件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;
}
  1. 在需要测试的地方添加断点开始调试

查看Lua字节码

使用luac.exe可以将lua文件编译成二进制形式,然后可以将二进制文件反编译成字节码的形式来查看。

lua二进制文件由两部分构成:文件头块顶层函数块。文件头块为12字节,存放的是整个文件的一些格式信息。顶层函数块存放的lua的全局变量和内嵌函数等信息。

查看字节码的方式:

  1. 打开命令行,使用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:
在这里插入图片描述

  1. 使用luac -l 命令即可查看lua二进制文件对应的字节码:
    在这里插入图片描述

使用luac -l -l 可以查看更为详细的信息:
在这里插入图片描述

关于luac编译器的详细命令信息可查看 luac main page