无涯教程-Lua - 调试语句

这篇具有很好参考价值的文章主要介绍了无涯教程-Lua - 调试语句。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Lua提供了一个调试库,该库提供了所有原始函数供无涯教程创建自己的调试器。即使没有内置的Lua调试器,也有许多针对Lua的调试器,这些调试器由各种开发人员创建,其中许多开源。

下表列出了Lua调试库中可用的函数及其用法。

Sr.No. Method & Purpose
1

debug()

进入交互式模式进行调试,该模式将保持活动状态,直到仅在一行中连续输入内容并按回车键为止。

2

getfenv(object)

返回对象的环境。

3

gethook(optional thread)

以三个值返回线程的当前挂钩设置-当前挂钩函数,当前挂钩掩码和当前挂钩计数。

4

getinfo(optional thread,function或stack level,optional flag)

返回包含有关函数信息的表。您可以直接给函数,也可以给数字作为函数的值,这意味着该函数在给定线程的调用堆栈的level函数上运行-level 0是当前函数(getinfo本身); 1级是调用getinfo的函数;如果function的数量大于活动函数的数量,则getinfo返回nil。

5

getlocal(optional thread,stack level,local index)

返回在堆栈级别具有函数索引local的局部变量的名称和值。如果没有给定索引的局部变量,则返回nil,并且在超出范围的级别调用时会引发错误。

6

getmetatable(value)

返回给定对象的元表;如果没有元表,则返回nil。

7

getregistry()

返回注册表表,这是一个预定义的表,任何C代码都可以使用该表来存储需要存储的Lua值。

8

getupvalue(function,upvalue index)

此函数返回带有func函数的索引的upvalue的名称和值。如果给定索引没有升值,则该函数返回nil。

9

setfenv(function or  thread or userdata,environment table)

将给定对象的环境设置为给定表。返回对象。

10

sethook(optional thread,hook function,hook  mask string with "c" and/or "r" and/or "I" optional instruction count)

将给定函数设置为钩子。字符串掩码和数字计数描述何时调用该挂钩。在这里,每次Lua调用,返回并输入函数中的每一行代码时,都会分别调用c,r和l。

11

setlocal(optional thread,stack level,local index,value)

将值分配给在堆栈级别具有函数索引local的局部变量。如果没有给定索引的局部变量,该函数将返回nil,并且在级别超出范围的情况下调用时会引发错误。否则,它将返回局部变量的名称。

12

setmetatable(value,metatable)

将给定对象的元表设置为给定表(可以为nil)。

13

setupvalue(function,upvalue index,value)

此函数使用函数func的上索引将值分配给upvalue。如果给定索引没有升值,则该函数返回nil。否则,它返回升值的名称。

14

traceback(optional thread,optional message string,optional level argument)

构建带有追溯的扩展错误消息。

上面的列表是Lua中调试函数的完整列表,无涯教程经常使用一个库,该库使用上面的函数,并且调试起来更容易。

function myfunction ()
   print(debug.traceback("Stack trace"))
   print(debug.getinfo(1))
   print("Stack trace end")

   return 10
end

myfunction ()
print(debug.getinfo(1))

当运行上面的程序时,将获得如下所示的堆栈跟踪。

Stack trace
stack traceback:
	test2.lua:2: in function myfunction
	test2.lua:8: in main chunk
	[C]: ?
table: 0054C6C8
Stack trace end

在上述示例程序中,使用调试库中可用的debug.trace函数打印堆栈跟踪。 debug.getinfo获取函数的当前表。

无涯教程经常需要知道函数的局部变量以进行调试。为此,可以使用getupvalue并使用setupvalue来设置这些局部变量。

function newCounter ()
   local n = 0
   local k = 0
	
   return function ()
      k = n
      n = n + 1
      return n
   end
	
end

counter = newCounter ()

print(counter())
print(counter())

local i = 1

repeat
   name, val = debug.getupvalue(counter, i)
	
   if name then
      print ("index", i, name, "=", val)
		
      if(name == "n") then
         debug.setupvalue (counter,2,10)
      end
		
      i = i + 1
   end -- if
	
until not name

print(counter())

当运行上面的程序时,将得到以下输出。

1
2
index	1	k	=	1
index	2	n	=	2
11

在此示例中,计数器在每次调用时都会更新1。无涯教程可以使用getupvalue函数查看局部变量的当前状态。然后,将局部变量设置为新值。在此,在调用设置操作之前,n为2。使用setupvalue函数,它将更新为10。现在,当调用counter函数时,它将返回11而不是3。

Lua - 调试语句 - 无涯教程网无涯教程网提供Lua提供了一个调试库,该库提供了所有原始函数供无涯教程创建自己的调试器。即使没有...https://www.learnfk.com/lua/lua-debugging.html文章来源地址https://www.toymoban.com/news/detail-631172.html

到了这里,关于无涯教程-Lua - 调试语句的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 无涯教程-Lua - 变量声明

    变量的名称可以由字母,数字和下划线字符组成。它必须以字母或下划线开头,由于Lua区分大小写,因此大写和小写字母是不同的。 在Lua中,尽管无涯教程没有变量数据类型,但是根据变量的范围有三种类型。 全局变量(Global)     - 除非明确声明为局部变量,否则所有变量

    2024年02月14日
    浏览(48)
  • 无涯教程-Lua - 简介

    Lua是一种轻量语言,它的官方版本只包括一个精简的核心和最基本的库。这使得Lua体积小、启动速度快。它用ANSI C语言编写并以源代码形式开放,编译后仅仅一百余K,可以很方便的嵌入别的程序里。和许多“大而全”的语言不一样,网络通信、图形界面等都没有默认提供。但

    2024年02月14日
    浏览(41)
  • 无涯教程-Lua - 面向对象

    面向对象编程(OOP)是现代编程时代中使用最广泛的编程技术之一。 类(Class)                       - 类是用于创建对象的可扩展模板。 对象(Objects)               - 它是类的实例,并为其分配了单独的内存空间。 继承(Inheritance)       - 这是一个概念,一个类的变量和函数

    2024年02月14日
    浏览(35)
  • 无涯教程-Lua - 函数声明

    函数是一起执行任务的一组语句,您可以将代码分成单独的函数。 Lua语言提供了程序可以调用的许多内置方法。如方法 print() 打印在控制台中作为输入传递的参数。 Lua编程语言中方法定义的一般形式如下- Lua编程语言中的方法定义由方法标头和方法主体组成。这是方法的所有

    2024年02月14日
    浏览(42)
  • 无涯教程-Lua - Arrays(数组)

    数组是对象的有序排列,可以是包含行集合的一维数组,也可以是包含多行和多列的多维数组。 在Lua中,数组是使用带有整数的索引表实现的。数组的大小不是固定的,并且可以根据无涯教程的要求(取决于内存限制)来增长。 一维数组可以使用简单的表结构表示,并且可以使

    2024年02月14日
    浏览(37)
  • 无涯教程-Lua - Modules(模块)

    模块就像可以使用 require 加载的库,并且具有包含 Table 的单个全局名称,该模块可以包含许多函数和变量。 其中一些模块示例如下。 让无涯教程考虑一个简单的示例,其中一个函数具有数学函数。将此模块称为mymath,文件名为mymath.lua。文件内容如下- 现在,为了在另一个文

    2024年02月14日
    浏览(43)
  • 无涯教程-Lua - Iterators(迭代器)

    迭代器是一种构造,使您可以遍历所谓的集合或集合的元素。在Lua中,这些集合通常引用表,这些表用于创建各种数据结构(如数组)。 通用的 for 迭代器提供集合中每个元素的键值对。下面给出一个简单的示例。 当无涯教程运行上面的代码时,将获得以下输出- 上面的示例使

    2024年02月14日
    浏览(39)
  • 无涯教程-Lua - 文件I/O

    I/O库用于在Lua中读取和处理文件。 Lua中有两种文件操作,即隐式( Implicit )和显式( Explicit )操作。 对于以下示例,无涯教程将使用例文件test.lua,如下所示。 一个简单的文件打开操作使用以下语句。 下表列出了各种文件模式。 Sr.No. Mode Remark 1 \\\" r\\\" 只读模式,是打开现有文件的

    2024年02月14日
    浏览(34)
  • Lua脚本本地调试

    这里主要使用日志的方式进行debug 项目对openresty包的依赖比较高,所以环境基础都在openresty下进行 openresty下载地址 下载完成后解压,具体使用方式和nginx没有什么区别,主要依赖文件是一下几个 这里拿lua链接mysql为例 双击 nginx.exe即可,浏览器输入 http://localhost:8765 进入启动

    2024年02月16日
    浏览(41)
  • 详解 APISIX Lua 动态调试插件 inspect

    作者罗锦华,API7.ai 技术专家/技术工程师,开源项目 pgcat,lua-resty-ffi,lua-resty-inspect 的作者。 原文链接 Apache APISIX 有很多 Lua 代码,如何在运行时不触碰源代码的情况下,检查代码里面的变量值? 修改 Lua 源码来调试有如下缺点: 生产环境不允许也不应该修改源码 修改源码

    2023年04月14日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包