lua从青铜到王者基础篇第十三篇:lua调试(debug)(代码片段)

森明帮大于黑虎帮 森明帮大于黑虎帮     2022-12-03     692

关键词:

系列文章目录


文章目录


前言


🌲一、Lua 调试(Debug)

Lua 提供了 debug 库用于提供创建我们自定义调试器的功能。Lua 本身并未有内置的调试器,但很多开发者共享了他们的 Lua 调试器代码。

Lua 中 debug 库包含以下函数:

上表列出了我们常用的调试函数,接下来我们可以看些简单的例子:

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:
	D:\\vscode lua����\\hello world/Untitled-1.lua:1459: in function 'Myfunction'
	D:\\vscode lua����\\hello world/Untitled-1.lua:1464: in main chunk
	[C]: in ?
table: 00000213EBA939F0
Stack trace end
table: 00000213EBA939B0

在以实例中,我们使用到了 debug 库的 traceback 和 getinfo 函数, getinfo 函数用于返回函数信息的表。

🌳二、另一个实例

我们经常需要调试函数的内的局部变量。我们可以使用 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。现在我们调用函数,执行后输出为 11 而不是 3。

🌴三、调试类型

  • 命令行调试。
  • 图形界面调试。

命令行调试器有:RemDebug、clidebugger、ctrace、xdbLua、LuaInterface - Debugger、Rldb、ModDebug。

图形界调试器有:SciTE、Decoda、ZeroBrane Studio、akdebugger、luaedit。

💬🌲🌳🌴🌵总结

以上就是今天要讲的内容,本文介绍了Lua调试(Debug),而Lua调试(Debug)相关操作提供了程序的调试提示能实现能使我们快速便捷地了解数据的函数和方法,我们务必掌握。另外如果上述有任何问题,请懂哥指教,不过没关系,主要是自己能坚持,更希望有一起学习的同学可以帮我指正,但是如果可以请温柔一点跟我讲,爱与和平是永远的主题,爱各位了。

lua从青铜到王者基础篇第七篇:lua数组和迭代器(代码片段)

系列文章目录文章目录系列文章目录前言🌲一、Lua数组🌲1.一维数组🌳2.多维数组🌳二、Lua迭代器🌲1.泛型for的迭代器🌳2.无状态的迭代器🌴3.多状态的迭代器💬🌲🌳🌴🌵总结... 查看详情

c++从青铜到王者第十三篇:stl之list类的模拟实现(代码片段)

系列文章目录文章目录系列文章目录前言一、list的模拟实现二、list与vector之间的对比总结前言一、list的模拟实现#include<iostream>#include<assert.h>#pragmaoncenamespaceyyw template<classT> struct_list_node _list_node<T>*_n 查看详情

linux从青铜到王者第十三篇:linux多线程四万字详解(代码片段)

系列文章目录文章目录系列文章目录前言一、Linux线程概念1.什么是线程2.线程的优点3.线程的缺点4.线程的异常5.线程的用途二、进程和线程的对比1.进程和线程2.多进程的应用场景有哪些?三、线程控制1.POSIX线程库2.创建线程... 查看详情

lua从青铜到王者基础篇第六篇:lua字符串(代码片段)

系列文章目录文章目录系列文章目录前言🌲一、Lua字符串🌲1.语法🌳2.实例🌴3.转义字符🌵4.字符串操作函数🌲1.字符串全部转换为大写字母🌳2.字符串全部转换为小写字母🌴3.字符串替换🌵4... 查看详情

c++从青铜到王者第二十三篇:c++异常(代码片段)

系列文章目录文章目录系列文章目录前言一、C语言传统的处理错误的方式二、C++异常概念三、异常的使用1.异常的抛出和捕获2.异常的重新抛出3.异常安全4.异常规范四、自定义异常体系五、C++标准库的异常体系六、... 查看详情

linux从青铜到王者第二十篇:linux网络基础第三篇之ip协议

系列文章目录文章目录系列文章目录前言一、IP协议基本概念二、IPv4首部三、网络号和主机号四、早期地址管理方式五、CIDR(ClasslessInterdomainRouting)方式六、特殊的IP地址七、IP地址的数量限制八、路由控制总结前言一、IP协议基本... 查看详情

linux从青铜到王者第二十一篇:linux网络基础第三篇之数据链路层

系列文章目录文章目录系列文章目录前言一、数据链路层的以太网协议二、认识MAC地址三、对比理解MAC地址和IP地址四、ARP协议的作用五、ARP数据报格式五、ARP协议工作流程六、ARP缓存表七、DNS(DomainNameSystem)八、NAT协议九、NAPT协... 查看详情

linux从青铜到王者第十四篇:linux网络基础第一篇

系列文章目录文章目录系列文章目录前言一、计算机网络的发展过程1.独立模式2.网络互联模式3.局域网LAN4.广域网WAN二、认识计算机网络协议1.协议的概念2.什么是网络协议3.网络协议簇4.体系结构5.OSI七层模型6.TCP/IP五层(或四层)... 查看详情

linux篇第十三篇——多线程(线程概念+线程控制)(代码片段)

⭐️本篇博客开始要给大家介绍多线程相关的知识,多线程的内容比较多,所以我分三篇进行讲述,本篇博客主要讨论多线程的概念和多线程的控制,希望对你认识线程有所帮助。目录🌏Linux下的线程🌲... 查看详情

linux从青铜到王者第十八篇:linux网络基础第二篇之tcp协议

系列文章目录文章目录系列文章目录前言一、TCP面向字节流二、TCP粘包问题1.什么是TCP粘包问题2.TCP粘包问题的解决办法三、TCP异常情况四、TCP协议1.TCP协议段格式2.确认应答(ACK)机制3.超时重传机制4.连接管理机制1、TCP三次握手1.... 查看详情

linux从青铜到王者第十七篇:linux网络基础第二篇之udp协议

系列文章目录文章目录系列文章目录前言一、传输层1.再谈端口号2.端口号范围划分3.认识知名端口号(Well-KnowPortNumber)4.进程和端口号两个问题5.netstat查看网络状态二、UDP协议1.UDP协议端格式2.UDP的特点3.面向数据报4.UDP的缓冲区5.UDP... 查看详情

linux从青铜到王者第十六篇:linux网络基础第二篇之http协议(代码片段)

系列文章目录文章目录系列文章目录前言一、HTTP协议的概念二、HTTP协议URL的解释三、HTTP协议的数据流四、HTTP协议格式1.HTTP请求2.HTTP响应五、HTTP协议格式图解六、HTTP协议版本七、HTTP协议请求方法1.GET:获取资源2.POST:... 查看详情

c++从入门到入土第十三篇:vector的模拟实现

查看详情

设计模式从青铜到王者第三篇:uml类图(代码片段)

系列文章目录文章目录系列文章目录前言一、UML类图二、类图中具体类、抽象、接口和包的表示法1.在UML类图中表示具体类2.在UML类图中表示抽象类3.在UML类图中表示接口4.在UML类图中表示包三、在类图中表示关系1.实现关系2.泛化... 查看详情

mysql从青铜到王者第三篇:数据库表的约束

系列文章目录文章目录系列文章目录前言一、表的约束二、空属性三、默认值四、列描述五、zerofill六、主键七、自增长八、唯一键九、外键总结前言一、表的约束真正约束字段的是数据类型,但是数据类型约束很单一,... 查看详情

linux从青铜到王者第十九篇:linux网络基础第二篇之滑动窗口流量控制拥塞控制延迟应答捎带应答

系列文章目录文章目录系列文章目录前言👮一、滑动窗口💰一、滑动窗口的由来💰二、滑动窗口存在的问题💷1.滑动窗口的大小💷2.数据包已经传输给对方,但是对方返回的ACK数据包丢失💷3.传输的... 查看详情

git从青铜到王者第三篇:git的基础(代码片段)

系列文章目录文章目录系列文章目录前言一、获取Git存储库1.在现有目录中初始化存储库2.克隆现有存储库二、Git记录每次更新到仓库1.记录每次更新到仓库2.检查当前文件状态3.跟踪新文件4.暂存修改的文件5.状态简览6.忽略文件7.... 查看详情

c++从青铜到王者第十八篇:c++之多态(代码片段)

系列文章目录文章目录系列文章目录前言一、多态的概念1.多态的概念二、多态的定义及实现1.多态的构成条件2.虚函数的认识3.虚函数的重写1.虚函数重写的两个例外之协变2.虚函数重写的两个例外之析构函数的重写4.C++11ove... 查看详情