Mare 一个 Lua 5.3 调试器

快速开始


目录

本页文档介绍如何以最少折腾方式快速开始试用调试器。

安装

提供一个独立运行程序 mare-runner,打包了所有运行时依赖以及示例程序,开箱即用。

可在 Github Release 下载,解压到任意目录即可。暂时只有 Windows/Linux,MacOS 需自行编译 C 模块

下文执行命令都以 Bash 为例,Windows 下用 cmd 需要改一下,例如执行文件需带 .exe,路径用反斜杠

运行服务端

打开终端进入解压后的目录,使用 node 执行 index.js 文件,Windows 可以直接双击 run.bat。

默认配置下,会使用本机三个端口 8001、8083、9223,以及 dbdata/ 保存运行时数据。

$ ./node index.js 
=== Mare servers started === 

Server for Lua debugger to attach:
socket://127.0.0.1:8083

Server implement Chrome Debugger Protocol:
http://127.0.0.1:9223/

Server access Chrome DevTools Frontend:
http://127.0.0.1:8001/

使用 Chrome 打开 http://127.0.0.1:8001/ 应该看到运行状态了。

调试 Lua 代码

在 example/ 目录下包含了一些示例,以及编译好的 lua 执行程序。

就是用 remotedebug.so 的接口 start 一个 Debug VM 的入口文件就行了。比如调试最简单的 Hello World

$ cat test.lua 
require('remotedebug').start('debug-test')

print('hello, world')

这里加 -i 运行以便运行后停在提示符里。

$ ./lua -i test.lua 
Lua 5.3.4  Copyright (C) 1994-2017 Lua.org, PUC-Rio
[mare] devtools url: http://127.0.0.1:8001/devtools/inspector.html?ws=127.0.0.1:9223/session/test?project.source=example
hello, world
> 

会打印出 url,用 Chrome 浏览器打开,就出现 DevTools 界面,就能够调试代码了。在 Console 里看到已执行 hello world 的同步输出。

你可以继续在提示符里继续 print 任意对象,比如执行 print(_ENV) 试试。

  • 要把 /path/to/script_folder 替换成 example 的绝对目录,才能找到源码,如果你只是看 Console 输出,就不需要了。
  • Debug VM 里的 print,不会同步到 DevTools 里,Host VM 里的才会。

示例文件夹

一些常见测试代码

  • test-console.lua 测试语义化输出
  • test-funcs.lua 测试各种函数
  • test-pause.lua 测试在 Host VM 插入中断
  • test-print.lua 测试 print 同步输出的选项
  • test-repl.lua 测试在 DevTools 里执行 lua 代码
  • test-table.lua 各种 table 类型
  • test-tabson.lua 测试 table 的序列化
  • test-tailcall.lua 测试尾调用

你可以继续查看更多文档


Fork me on GitHub