Skip to Content

ffi debug

Posted on 2 mins read

FFI 包调用,Lua C 交互报错,没有任何信息,只能想法 Debug。

ltrace

转储一个给定 trace 编号(起始为 1)的 LuaJIT trace 对象的内容。 获取 LuaJIT trace 对象机器码的开始和结束地址区间可以用来转储该 LuaJIT trace 对象的机器码。

```gdb (gdb)set disassembly-flavor intel (gdb)disas start_addr end_addr

ltracebymcode

通过 LuaJIT trace 对象的机器码所包含的指定地址为唯一参数,在所有的 LuaJIT trace 对象中检索该 LuaJIT trace 对象。

lir

通过 trace 编号来转储 LuaJIT trace 对象的 IR Code(CPU 寄存器和快照详细) 信息。 输出格式与 LuaJIT 自己的 -jdump=+rs 一样。

lmainL

打印 主 LuaJIT 虚拟机的 lua_State 指针值。

lcurL

打印当前运行的 Lua 线程 lua_State 的指针值。

lg

打印给定 lua_State 指针值所对应 VM 的 global_State 指针值,默认打印当前运行 VM 的 global_State 指针值。

lglobtab

打印指定 Lua 线程的全局变量表,默认打印当前线程的全局变量表(GCtab 指针)。

ltabgets

打印 TValue 或者 GCtab 指针指定 Lua 表中 指定字段的信息。(通过 lval 命令获取字段信息)

lpc

Prints out the Lua prototype (GCproto object) whose bytecode contains the PC value specified as the BCIns pointer value. The Lua source line’s location (file name and line number) will also be printed out.

PC ? BCIns ?

lproto

Lua prototype objects? GCproto pointer values

lfunc

GCfunc pointer values

luv

打印与给定 GCfunc 指针值相关所有 Upvalues 的所有字段的名称与值。

lbc

lval 从 GCproto GCfunc 中都能取到 字节地址的区间 range

转储 bytecode

lgc

打印当前由 LuaJIT GC 分配的总内存大小。非常有用,来检查 LuaJIT 虚拟机是否在 Lua 层面耗费了大量的内存。

lgcstat

打印 GC 对象的统计汇总,包括活体的,和死了还没被回收的。

lgcpath

找出大小大于指定阈值的活体 LuaJIT GC 对象。 同时打印出从 GC roots 到该对象被匹配这一条引用路径。

lthreadpc

Prints out the next PC to be executed for a yielded Lua thread.

(gdb) lthreadpc (lua_State)0x4169ece0 next PC: (BCIns)0x40c5d8f0 proto: (GCproto*)0x40c5d898 BC pos: 5 source line: @/opt/app/dummy/lua/exit.lua:131 proto first line: 127

lb

设置 Lua 断点。通过文件名以及 函数原型声明的行号。

ldumpstack

Shows the stack content of the given lua_State struct 不生效?

comments powered by Disqus