lua如何打印行号_Lua 调试库

Lua 调试库

http://blog.csdn.net/vermilliontear/article/details/50851045

http://blog.csdn.net/vermilliontear/article/details/50865156

Q:什么是活动函数?

A:程序中被调用但还未执行完成的函数。

function g()

--[[ 此时函数"g"被调用但还未执行完成,是活动函数。所以这里获取的是函数"g"的信息。

"debug.getinfo(2)"获取的才是函数"f"的信息。]]

local x = debug.getinfo(1, "n")

for k, v in pairs(x) do

print(k, v)

end

end

function f()

-- 此时函数"f"被调用但还未执行完成,是活动函数。所以这里获取的是函数"f"的信息。

local x = debug.getinfo(1, "n")

for k, v in pairs(x) do

print(k, v)

end

print()

g()

end

f()

--[[ result:

namewhat global

name f

namewhat global

name g

]]

Q:什么是调用栈?

A:Lua存储活动函数所使用的栈。每个线程都有自己独立的调用栈。

Q:什么是调用栈的级别?

A:调用调试库函数的函数的栈级别是1,调用该函数的函数的栈级别是2,以此类推。

function foo()

-- 调用调试库的函数。

...

end

function goo()

foo()

end

function hoo()

goo()

end

--[[ 被调用的调试库函数栈级别为0,"foo"的栈级别为1,"goo"的栈级别为2,"hoo"的栈级别为3。

如果还有别的函数调用"hoo()",则栈级别以此类推。]]

hoo()

Q:如何查看调用栈信息?

A:

--[[ debug.traceback([thread,] [message [, level]])

首先打印"message",接着从第"level"个栈级别开始打印"thread"线程中的调用栈信息。

如果"message"不是字符串或"nil",则函数不做任何处理直接返回"message"。

"thread"默认为当前线程,"level"默认为1。]]

function foo()

print(debug.traceback("This is traceback: "))

print()

print(debug.traceback("Traceback from stack_level 2: ", 2))

print()

print(debug.traceback({}))

end

function goo()

foo()

end

function hoo()

goo()

end

hoo()

--[[ results:

This is traceback:

stack traceback:

E:\a.lua:2: in function 'foo'

E:\a.lua:8: in function 'goo'

E:\a.lua:12: in function 'hoo'

E:\a.lua:15: in main chunk

[C]: in ?

Traceback from stack_level 2:

stack traceback:

E:\a.lua:8: in function 'goo'

E:\a.lua:12: in function 'hoo'

E:\a.lua:15: in main chunk

[C]: in ?

table: 00522F78

]]

Q:如何查看函数信息?

A:

--[[ debug.getinfo([thread,] f [, what])

返回一个"table",其中包含线程"thread"中的函数"f"由"what"指定的相关信息。

"thread"默认为当前线程。"f"可以是函数名,也可以是一个数值,如果是数值则代表该函数的栈级别。

如果通过名字指定的函数不存在,则报错;如果通过数值指定的函数不存在,则返回"nil"。

如果"what"不指定,默认情况下返回除合法行号表外的所有域:

source: 创建这个函数的"chunk"的名字。

如果"source"以'@'打头,表示这个函数定义在一个文件中,而'@'之后的部分就是文件名。

若"source"以'='打头,表示之后的部分由用户行为来决定如何表示源码。

其它的情况下,这个函数定义在一个字符串中,而"source"正是那个字符串。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值