如何判断Lua脚本中的行号x是否会响应Lua line hook
?
示例:
1 first = 1
2
3 function test ( data )
4 if first == 0 then
5 print ("\r\n")
6 end
7 print(data)
8 --[[
9 first = 0
10 ]]
11 end
12
13 test()
14
第2,6,8,9,10,12和14行不会调用线钩。在我加载并执行了脚本之后,我可以从C / C ++中获取一个可执行行号表吗?
答案 0 :(得分:2)
答案 1 :(得分:1)
一些代码示例:
local exec_lines = {}
local function exec_line_counter(event, line)
table.insert(exec_lines, line)$
end
local function count_exec_lines(lua_file)
local external_chunk = loadfile(lua_file)
debug.sethook(exec_line_counter, "l")
external_chunk()
debug.sethook()
-- Removing `debug.sethook()` lines:
table.remove(exec_lines, 1)
table.remove(exec_lines, #exec_lines)
end
count_exec_lines("test.lua")
输出:
table.sort(exec_lines)
for i, num in ipairs(exec_lines) do
print(num)
end
是
1
3
4
7
11
11< ---不确定为什么这个重复。缺少
return
?或者因为关注tailcall
?13
注意:它只会记录正在解析的行。在您的测试用例中,它不包括第5行和第6行,因为first
不是0。
这样做的另一种方法和解决着名的案例 - 只是简单地解析Lua源:计算和跳过仅包含Lua注释的行:
--lines
--[[ blocks ]]