无涯教程-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
endmyfunction ()
print(debug.getinfo(1))

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

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

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

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

function newCounter ()local n = 0local k = 0return function ()k = nn = n + 1return nendendcounter = newCounter ()print(counter())
print(counter())local i = 1repeatname, val = debug.getupvalue(counter, i)if name thenprint ("index", i, name, "=", val)if(name == "n") thendebug.setupvalue (counter,2,10)endi = i + 1end -- ifuntil not nameprint(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.hqwc.cn/news/55503.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Gogs Git windos服务搭建指南

Gogs Git服务器搭建指南 背景: 近期在Linux 麒麟 v10 系统上开发;为了团队协同编程;选用了Git服务器;之前在windos开始时候使用的visualSVN server; visualSVN server从4.x.x.x开始收费;限制15个开发者用户&#xff…

【100天精通python】Day23:正则表达式,基本语法与re模块详解示例

目录 专栏导读 1 正则表达式概述 2 正则表达式语法 2.1 正则表达式语法元素 2.2 正则表达式的分组操作 3 re 模块详解与示例 4 正则表达式修饰符 专栏导读 专栏订阅地址:https://blog.csdn.net/qq_35831906/category_12375510.html 1 正则表达式概述 python 的…

MySQL系统数据库及常用工具指令介绍

文章目录 1.系统数据库2.常用工具2.1 -e指令2.2 mysqladmin指令2.3 mysqlbinlog指令2.4 mysqlshow指令2.5 mysqldump指令 数据备份2.6 mysqlimport/source 指令 数据导入 3.指令小结 1.系统数据库 2.常用工具 2.1 -e指令 不用登陆mysql直接执行脚本命令 mysql -h192.168.200.…

如何使用大模型处理生活繁琐的工作

如果每封电子邮件、每个带有订单、发票、投诉、录用请求或工作申请的 PDF 都可以翻译成机器可读的数据,会怎样?然后可以由 ERP / CRM / LMS / TMS 自动处理吗?无需编程特殊接口。 听起来很神奇?它确实有一些魔力。但最近已成为可…

Xposed框架开发

文章目录 xpose插件开发步骤清单文件新建一个类(插件入口点)设置入口点 Hook第一个实例zhuceji.apk一些常用的HOOKHookH5PluginHookProxyPluginHookSystem 资料Xposed原理初探 xpose插件开发步骤 magisk安装与配置 Xpose Framework API LSPosed magisk …

02_kafka_基本概念_基础架构

文章目录 常见的消息队列工作模式基本概念kafka 特性Kafka 基本架构topic 分区的 目的/ 好处 日志存储形式消费者,消费方式 逻辑消费组 高性能写入: 顺序写 mmap读取:零拷贝DMA 使用场景 常见的消息队列工作模式 至多一次:消息被…

【iOS】json数据解析以及简单的网络数据请求

文章目录 前言一、json数据解析二、简单的网络数据请求三、实现访问API得到网络数据总结 前言 近期写完了暑假最后一个任务——天气预报,在里面用到了简单的网络数据请求以及json数据的解析,特此记录博客总结 一、json数据解析 JSON是一种轻量级的数据…

FFmpeg常见命令行(二):FFmpeg转封装

前言 在Android音视频开发中,网上知识点过于零碎,自学起来难度非常大,不过音视频大牛Jhuster提出了《Android 音视频从入门到提高 - 任务列表》。本文是Android音视频任务列表的其中一个, 对应的要学习的内容是:如何使…

基于C#的应用程序单例唯一运行的完美解决方案 - 开源研究系列文章

今次介绍一个应用程序单例唯一运行方案的代码。 我们知道,有些应用程序在操作系统中需要单例唯一运行,因为程序多开的话会对程序运行效果有影响,最基本的例子就是打印机,只能运行一个实例。这里将笔者单例运行的代码共享出来&…

【频率派和贝叶斯派】进阶学习-贝叶斯方法原理、基本结构、代码构建+图模型

文章目录 前言1.理论支撑贝叶斯思考模式贝叶斯定理贝叶斯公式 2. 应用转化2.1 拼写检查 3. 贝叶斯网络3.1 贝叶斯网络的定义3.2 三个形式和实际案例的构建关系 前言 频率派与贝叶斯派各自不同的思考方式: 1.频率派把需要推断的参数θ看做是固定的未知数&#xff0c…

Ubuntu安装git

使用 apt-get install git 安装git 报错: 这个错误信息通常表示您的系统上没有可用的 git 软件包。这可能是因为您的软件源列表中没有包含 git 软件包所在的软件源,或者您的软件源列表已经过期。 解决: 如果您使用的是 Ubuntu 或类似…

(十二)大数据实战——hadoop集群之HDFS高可用自动故障转移

前言 本节内容主要介绍一下hadoop集群下实现HDFS高可用的自动故障转移,HDFS高可用的自动故障转移主要通过zookeeper实现故障的监控和主节点的切换。自动故障转移为 HDFS 部署增加了两个新组件:ZooKeeper 和 ZKFailoverController (ZKFC&…