无涯教程-Lua - 调试语句

news2024/9/20 20:28:44

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/824909.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Spring Boot】请求参数传json对象,后端采用(map)CRUD案例(101)

请求参数传json对象,后端采用(map)接受的前提条件: 1.Spring Boot 的控制层接受参数采用:RequestBody 2.需要一个Json工具类,将json数据转成Map; 工具类:Json转Map import com.bao…

【MyBatis】MyBatis把空字符串转换成0的问题处理方案(96)

先看问题: Postman入参: MyBatis采用map循环插入: // Mapper接口层void addPar(Param(value "question") Map<String, Object> paramMap);<!-- 新增&#xff1a;参数 --><insert id"addPar" parameterType"map">INSERT IGNO…

DispatcherServlet、拦截器、处理器详解(通俗易懂)

DispatcherServlet、拦截器、处理器详解(通俗易懂) 1.DispatcherServlet ​ 想象一下你去一个大型办公楼寻找特定的办公室。你到达大厅&#xff0c;遇到一个接待员&#xff08;DispatcherServlet&#xff09;。你告诉接待员你要找的办公室&#xff08;请求的URL&#xff09;&…

iOS——Block循环引用

Capturing ‘self’ strongly in this block is likely to lead to a retain cycle 典型的循环引用 self持有了blockblock持有了self(self.name) 这样就形成了self -> block -> self的循环引用 解决办法 强弱共舞 使用 中介者模式 __weak typeof(self) weakSelf sel…

策略模式:优雅地实现可扩展的设计

策略模式&#xff1a;优雅地实现可扩展的设计 摘要&#xff1a; 策略模式是一种常用的设计模式&#xff0c;它可以帮助我们实现可扩展的、灵活的代码结构。本文将通过一个计算器案例来介绍策略模式的概念、使用场景以及如何在实际项目中应用策略模式来提高代码的可维护性和可扩…

海外ASO优化之如何探索竞争对手

查找有关竞争对手应用程序的所有有用信息&#xff0c;并对其进行分析&#xff0c;从而获得有效的见解。 发现与我们应用程序相关的关键词。将他们添加到竞争对手列表中&#xff0c;并通过关键词浏览器工具分析他们的表现。 1、调查竞争对手的 ASO 策略。 搜索查询研究所有国家…

【nginx】源码安装nginx以及手动配置域名ssl证书

安装nginx 下载地址:nginx: download 稳定版 上传源码包到linux目录&#xff0c;如/opt/nginx 安装nginx编译时需要的依赖 yum install -y pcre-devel zlib-devel openssl-devel wget gcc tree vim 编译安装nginx 解压nginx源码安装包&#xff0c;并进入解压后的目录&#…

maven打包时跳过测试

1、命令行 mvn clean install -DskipTests mvn clean -DskipTeststrue install 2、idea跳过 打包时通过idea先进行clean&#xff0c;在进行install&#xff0c;会自动跳过test

机器学习04-数据理解之数据可视化-(基于Pima数据集)

什么是数据可视化? 数据可视化是指通过图表、图形、地图等视觉元素将数据呈现出来的过程。它是将抽象的、复杂的数据转化为直观、易于理解的视觉表达的一种方法。数据可视化的目的是帮助人们更好地理解数据&#xff0c;从中发现模式、趋势、关联和异常&#xff0c;从而作出更明…

案例|会展大数据服务系统 智能服务体系建设实践

根据相关的市场调查发现在国内进行的2000多个会展项目中&#xff0c;仅有15%的项目能够提供相关主题网站基本业务和服务&#xff0c;且提供的服务并不能够满足会展各方的应用&#xff0c;剩余的大部门会展项目信息系统构建的不够完善、技术性差、应用复杂等&#xff0c;甚至提供…

python_在K线找出波段_02_找出波段

承接 【python_在K线找出波段_01_找出所有转折点】博文 地址&#xff1a;python_在K线找出波段_01_找出所有转折点_程序猿与金融与科技的博客-CSDN博客 目录 写在前面&#xff1a; 寻找波段的逻辑&#xff1a; 寻找方法 判断高低点连线是否有效 判断方法: 判断点相对连…

画图干货!14种uml图类型及示例

1. 什么是 UML UML 是统一建模语言的缩写。UML 图是基于 UML&#xff08;统一建模语言&#xff09;的图表&#xff0c;目的是直观地表示系统及其主要参与者、角色、动作、工件或类&#xff0c;以便更好地理解、更改、维护或记录信息关于系统。简而言之&#xff0c;UML 是一种…

项目经理必备-项目总体计划模板-制式文件,可直接填写使用-公司可用

合同中完整项目名称&#xff0c;黑体&#xff0c;28号字&#xff0c; 居中对齐&#xff0c;项目名称较长时换行填写 当前文档名称&#xff0c;黑体&#xff0c;小初&#xff0c; 居中对齐&#xff0c;文档名称较长时 换行填写 版 本 号 x.x 编制人 日期 20xx年xx月xx日…

【css】css实现一个简单的按钮

四种链接状态分别是&#xff1a; a:link - 正常的&#xff0c;未访问的链接a:visited - 用户访问过的链接a:hover - 用户将鼠标悬停在链接上时a:active - 链接被点击时 <style> a:link, a:visited {//未访问、访问过background-color: #07c160;//设置背景颜色color: wh…

吉客云·奇门对接打通金蝶云星空销售单查询接口与销售出库新增接口

吉客云奇门对接打通金蝶云星空销售单查询接口与销售出库新增接口 对接系统&#xff1a;吉客云奇门 “吉客云”是一站式企业数字化解决方案系统&#xff0c;可实现业务、财务、办公、人事等一体化管理。相对于传统多套软件系统的集成方案&#xff0c;“吉客云”具有业务流程更流…

Vue3描述列表(Descriptions)

&#x1f601; 整体功能效果与 ant design vue 保持高度一致 &#x1f601; 包含两种组件&#xff1a;Descriptions 和 DescriptionsItem&#xff08;必须搭配使用&#xff01;&#xff09; APIs Descriptions 参数说明类型默认值必传title描述列表的标题&#xff0c;显示在…

Dos 命令简介

DOS 简介 DOS是Disk Operating System的缩写&#xff0c;即“磁盘操作系统”。DOS主要是一种面向磁盘的系统软件&#xff0c;有了DOS&#xff0c;我们就可以更容易理解怎么给机器下命令&#xff0c;不必去深入了解机器的硬件结构&#xff0c;也不必去死记硬背那些枯燥2进制数字…

图论-简明导读

计算机图论是计算机科学中的一个重要分支&#xff0c;它主要研究图的性质和结构&#xff0c;以及如何在计算机上有效地存储、处理和操作这些图。本文将总结计算机图论的核心知识点。 一、基本概念 计算机图论中的基本概念包括图、节点、边等。图是由节点和边构成的数据结构&am…

二叉树进阶版(C)

文章目录 1.树1.1概念1.2相关定义1.3 表示&#xff08;左孩子右兄弟&#xff09; 2.二叉树2.1概念2.2特殊的二叉树1. 满二叉树&#xff1a;2. 完全二叉树&#xff1a; 2.3二叉树的性质2.4练习 3.二叉树的存储结构1. 顺序存储2. 链式存储 4.完全二叉树的代码实现4.1堆的介绍1.堆…

静态路由下一跳地址怎么确定(基本静态路由配置实验步骤)

什么是静态路由&#xff1f;静态路由是路由的一种方式&#xff0c;路由项由手动配置&#xff0c;而非动态决定。与动态路由不同&#xff0c;静态路由是固定的&#xff0c;不会改变&#xff0c;即使网络状况已经改变或是重新被组态。一般来说&#xff0c;静态路由是由网络管理员…