getinfo是调试Lua程序时一个很重要很常见的函数,主要用于获取函数调用的基本信息。这个函数的难点在于各个参数的含义。下面一一介绍。

一、函数简介:

1.原型:getinfo(level, arg)

2.调用:debug.getinfo(level, arg)

3.返回值:返回一个包含函数信息的table,table的内容由参数arg决定,包含哪个函数的信息由level决定.

4.参数解释:

  (1)level:函数调用的层级,表示要输出哪个函数的信息。

      (0:getinfo自身,1:调用getinfo的函数f1,2:调用f1的函数f2,...以此类推。f1, f2, ...也可能不是函数,而是在文件中直接调用getinfo)

  (2)arg:该参数是一个字符串,其中每个字符代表一组字段,用于指定希望获取哪些信息,可为 "n","S","l","u","f","L" 中的一个或他们的组合

    【注意区分大小写

    <英文看不懂没关系,我简单解释下,加黑的表示返回的table包含的内容,即函数信息>   

    'n': fills in the field name and namewhat;

    'S': fills in the fields sourcelinedefinedlastlinedefinedwhat, and short_src;(source)

    'l': fills in the field currentline;

    'u': fills in the field nups;

    'f': pushes onto the stack the function that is running at the given level; ->func

    'L': pushes onto the stack a table whose indices are the numbers of the lines that are valid on the function. (A valid line is a line with some       associated code, that is, a line where you can put a break point. Non-valid lines include empty lines and comments.) ->activelines

    name:函数名, namewhat:函数类型(field, upvalue, global),what:函数类型(Lua, C, main),

     short_src, source:函数所属的文件名,  linedefined, lastlinedefined:函数定义的起始和结束行号,

     currentline:上级(level - 1)函数被调用的行号,nups: 函数的upvalue值的个数,

    func:函数本身, activelines:一个包含行号的table,可理解为该函数运行的代码的行号

  (如果还不是很明白,可以看下面的示例,也可以自己运行一下代码)

二、示例

假设一个文件luatest4.lua包含如下代码:

local args = {"n","S","l","u","f","L"}
local function f1()
  for level =0,3 do --不同级别
    print("level================", level)
    for k, v in ipairs(args) do --不同参数
      print("arg======", v)
      local fInfo = debug.getinfo(level, v)
      for key, val in pairs(fInfo) do
        print("key, val==", key, val)
      end
    end
  end
end

local function f2()
  print("f1=====", f1)
  f1()
end

function main()
  print("f2=====", f2)
  f2()
end
print("main======", main)
main()

--========运行以上代码,结果如下(win7上测试的)======

main====== function: 0073D128
f2===== function: 0073D108
f1===== function: 0073D0E8
level================ 0
arg====== n
key, val== name getinfo
key, val== namewhat field
arg====== S
key, val== source =[C]
key, val== what C
key, val== lastlinedefined -1
key, val== linedefined -1
key, val== short_src [C]
arg====== l
key, val== currentline -1
arg====== u
key, val== nups 0
arg====== f
key, val== func function: 0073AF70
arg====== L
level================ 1
arg====== n
key, val== name f1
key, val== namewhat upvalue
arg====== S
key, val== source @luatest4.lua
key, val== what Lua
key, val== lastlinedefined 13
key, val== linedefined 2
key, val== short_src luatest4.lua
arg====== l
key, val== currentline 7
arg====== u
key, val== nups 1
arg====== f
key, val== func function: 0073D0E8
arg====== L
key, val== activelines table: 0073BC78
level================ 2
arg====== n
key, val== name f2
key, val== namewhat upvalue
arg====== S
key, val== source @luatest4.lua
key, val== what Lua
key, val== lastlinedefined 18
key, val== linedefined 15
key, val== short_src luatest4.lua
arg====== l
key, val== currentline 17
arg====== u
key, val== nups 1
arg====== f
key, val== func function: 0073D108
arg====== L
key, val== activelines table: 0073BDE0
level================ 3
arg====== n
key, val== name main
key, val== namewhat global
arg====== S
key, val== source @luatest4.lua
key, val== what Lua
key, val== lastlinedefined 23
key, val== linedefined 20
key, val== short_src luatest4.lua
arg====== l
key, val== currentline 22
arg====== u
key, val== nups 1
arg====== f
key, val== func function: 0073D128
arg====== L
key, val== activelines table: 0073EA78

--===============================

看完这个示例后,大家应该对getinfo有所了解了吧。

转载于:https://www.cnblogs.com/heyongqi/p/6816274.html

Lua调试:getinfo详解相关推荐

  1. Windbg调试命令详解

    Windbg调试命令详解 发表于2013 年 8 月 23 日 转载注明>> [作者:张佩][原文:http://www.yiiyee.cn/Blog] 1. 概述 用户成功安装微软Win ...

  2. Visual Studio Code (VSCode) 之 C/C++ 调试配置详解

    准备   默认情况下,VSCode仅仅内置了对node.js运行时的调试支持,只可以直接调试JavaScript.TypeScript和任何其他翻译为JavaScript的语言.其他语言的调试支持,都 ...

  3. F12调试调试窗口详解

    目录 前言 一.F12调试参数详解 1.Elements: 2.Network: Name: headers: Preview: Response: Timing: 3.console: 4.Sour ...

  4. 电路板选择、焊接和调试技巧详解(7)

    原文地址::http://www.360doc.com/content/13/0513/17/11723777_285167796.shtml 相关文章 1.电路板选择.焊接和调试技巧详解(2)--- ...

  5. php和js调试,JS调试使用详解

    这次给大家带来JS调试使用详解,JS调试的注意事项有哪些,下面就是实战案例,一起来看一下. 试想一下:出现了某个bug,有人用几分钟就搞定了,有人用了半天或者一天都找不到原因所在.你愿意当前者还是后者 ...

  6. Cocos 2d-X Lua 游戏添加苹果内购(二) OC和Lua交互代码详解

    这是第二篇 Cocos 2d-X Lua 游戏添加苹果内购(一) 图文详解准备流程 这是前面的第一篇,详细的说明了怎样添加内购项目以及填写银行信息提交以及沙盒测试员的添加使用以及需要我们注意的东西,结 ...

  7. oracle中调试存储过程,详解Oracle调试存储过程

    详解Oracle调试存储过程 一 调试关键步骤 1.在要调试的存储过程右键,选择编辑以进行调试,截图如下: 2.点击小瓢虫,弹出调试窗口,截图如下: 3.输入7839员工编号,点击确认,进行调试,截图 ...

  8. VScode调试Linux详解

    在Linux上通常使用gdb命令行调试,但该方式调试不太直观,且命令行长时间不用,容易忘记,不如GUI直观和容易上手,下面介绍基于GUI的方式调试Linux. 一.Linux调试GUI方案简介 1)  ...

  9. 【精选】Nginx模块Lua-Nginx-Module学习笔记(一)Nginx Lua API 接口详解

    源码地址:https://github.com/Tinywan/Lua-Nginx-Redis 一.介绍 各种* _by_lua,* _by_lua_block和* _by_lua_file配置指令用 ...

  10. Android Studio下Terminal窗口Window下cmd黑窗口中使用adb命令调试精炼详解

    一.前期基础知识储备 (1)adb命令行的定义与作用 adb的全称为Android Debug Bridge,中文名"调试桥",顾名思义adb命令是调试手机中应用的一种方法,而且作 ...

最新文章

  1. 01 使用AFN3 0上传图片时间慢的问题
  2. HttpModule与HttpHandler详解(转)
  3. LAMP服务搭建详解
  4. Batch Norm、Layer Norm、Instance Norm、Group Norm、Switchable Norm总结
  5. 大量小文件存储提高效率要点详解
  6. File类的构造方法
  7. redis的各种数据集的列举功能
  8. opengl绘制长方体线框_OpenGL绘图实例十之绘制3D机器人
  9. [pytorch、学习] - 5.3 多输入通道和多输出通道
  10. MYSQL 数据库配置优化
  11. iperf3使用方法说明
  12. 51单片机控制电机正反转
  13. Pillow为图片添加水印
  14. 大数据告诉您:采用IT人才外包的优势
  15. IBM建立大中华区云计算中心供验证测试
  16. (2019.07) BSV 链上运算模型
  17. 为什么近几年一直在说互联网进入了下半场?
  18. Python爬虫(5)
  19. mysql 字符串截取
  20. Office LTSC 2021离线安装ISO镜像

热门文章

  1. 理解并取:frame-relay的工作原理
  2. 算法与程序的区别与联系
  3. com.alibaba.datax.common.exception.DataXException: Code:[ESWriter-03]
  4. 阿里云服务器购买价格,真正实用的阿里云服务器价格表
  5. PL/0词法分析程序
  6. 计算机用户名登录取消,win7系统取消登录界面显示用户名的还原办法
  7. NeurIPS 2021 放榜!旷视研究院5篇接收论文亮点解读!
  8. vlan internal allocation policy ascending解释
  9. java 造数据_java测试造数据神器JavaFaker
  10. c语言作业ppt模板,c语言演讲模板ppt