Lua Debugger 1.1.1
新的介绍内容:
Lua Debugger:在Visual Studio Code中调试Lua程序的终极指南
Lua Debugger扩展为Lua开发者提供了一个强大的工具,使您能够在Visual Studio Code中高效调试Lua程序。本文将为您详细介绍如何使用Lua Debugger,包括使用要求、配置步骤、调试连接方法以及远程调试技巧。
使用要求:
- 在要调试的Lua程序中能够使用luasocket。
- 在要调试的Lua程序中能够使用JSON库。推荐使用cjson和dkjson,但也可使用其他兼容接口的JSON库。
- 您的代码或第三方库不应调用debug.sethook。
配置步骤:
要使用Lua Debugger调试Lua程序,您需要将vscode-debuggee.lua文件放入要调试的程序中。如果您之前使用过mobdebug,对此应该已经很熟悉。
调试连接方法:
- 下载vscode-debuggee.lua并将其放入您的项目中。
- 在所有Lua源代码加载后,将以下代码粘贴到您的程序中运行。根据您使用的JSON库,您可能需要相应地修改代码。
local json = require 'dkjson'
local debuggee = require 'vscode-debuggee'
local startResult, breakerType = debuggee.start(json)
print('debuggee start ->', startResult, breakerType)
- 在Visual Studio Code中打开包含要调试程序的文件夹,按Ctrl-Shift-D打开调试窗口,并相应地编辑调试设置。
- 在要调试的程序中按F9在适当位置设置断点。
- 按F5键开始调试。
错误发生时进入调试器的设置:
在想要处理错误的位置粘贴以下代码:
xpcall(
function()
-- 实际运行的代码
local a = 1 nil
end,
function(e)
if debuggee.enterDebugLoop(1, e) then
-- ok
else
-- 如果调试器未连接,则进入此处。
print(e)
print(debug.traceback())
end
end)
在执行过程中启用调试命令处理:
为了使Lua程序在运行时能够响应调试器的命令,如设置暂停或断点,请在适当的时间间隔调用以下代码。如果您的项目是游戏客户端,可以在每一帧调用它。
debuggee.poll()
Gideros支持:
您可以直接从Visual Studio Code运行Gideros Player。请参考调试设置中的'launch-gideros'部分。
远程调试:
如果您将调试设置设置为等待并开始调试,Visual Studio Code将等待调试目标而不执行一个。这在您想查看调试目标在控制台上留下的字符串,或调试器和调试目标必须在不同机器上运行时非常有用。
OP_HALT补丁:
基本上,vscode-debuggee.lua会降低Lua程序的运行速度,因为它使用debug.sethook实现断点机制。通过对Lua VM应用一个简单的补丁,可以克服这种性能下降。
下载:
- lua 5.1.5:补丁,代码
- lua 5.3.4:补丁,代码
致谢:
- OP_HALT补丁在很大程度上依赖于Lua邮件列表中提到的工作。感谢Dan Tull。
- 我们从mobdebug中获得了如何将调试目标连接到调试器的想法。感谢Paul Kulchenko。
- 感谢Google Translator翻译本文!
vscode-debuggee.lua参考:
debuggee.start(jsonLib, config)
与调试器连接。jsonLib是一个包含.encode和.decode函数的JSON库。Config.onError是在vscode-debuggee模块中发生错误时接收的回调。Config.connectTimeout、config.controllerHost和config.controllerPort是远程调试的设置。如果config.redirectPrint为true,则拦截print调用并在Visual Studio Code输出窗口中显示。如果您希望Gideros在断点之前调用print的结果,请使用此项。
debuggee.start返回两个值。如果正常连接到调试器,第一个返回值为true,否则为false。如果在当前Lua VM中应用了OP_HALT补丁,第二个返回值为'halt',否则为'pure'。
debuggee.poll()
处理排队的调试命令并立即返回。
debuggee.enterDebugLoop(depth[, what])
停止运行Lua程序并从当前位置开始调试。depth指定堆栈的相对深度,以指示调试器当前运行的位置。0表示调用debuggee.enterDebugLoop的地方,1表示浅一层。what是您在开始调试时想要传递给Visual Studio Code的消息。
debuggee.print(category, ...)
在vscode调试控制台上打印文本。category使打印文本着色,您可以选择log、warning或error。
-
- Golang云原生架构师课程
- Go是一门并发支持、垃圾回收的编译型系统编程语言;本课程转载自哔哩哔哩:https://www.bilibili.com/video/BV1Mh411M7A
- 204次学习
-
- MySQL数据管理之备份恢复案例解析视频教程
- 《MySQL数据管理之备份恢复案例解析视频教程》MySQL是一个开放源码的小型关联式数据库管理系统,目前MySQL被广泛地应用在Internet上的中小型网站中。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库。
- 160次学习
-
- MySQL索引优化解决方案
- 本套课程是根据MySQL索引的设计理念与数据结构、索引使用场景、索引分类、索引运用场景、索引性能分析、查询优化、MySQL索引的慢查询等组成,主要讲述了MySQL索引优化的解决方案,非常适合有MySQL使用基础或者有一定工作经验的同学。课程讲解了解决大数量查询慢的问题、如何编写一个高效的SQL、查询语句应该如何优化、索引的实现原理是什么、索引又应该如何优化...等诸多SQL索引优化的难点和面试点。
- 182次学习
-
- 极客学院Docker视频教程
- Docker是PaaS提供商dotCloud开源的一个基于LXC的高级容器引擎,源代码托管在Github上,基于go语言并遵从Apache2.0协议开源。Docker自2013年以来非常火热,无论是从github上的代码活跃度,还是各大厂商的支持,都使Docker成为了时下最受关注的技术,甚至微软都声称在下一代WindowsServer中集成对Docker的支持。所以我们收集了《极客学院Docke
- 243次学习
-
- Golang进阶实战编程
- 本课程是在《Go语言基础视频》基础之上录制的,是Go语言基础的后半部分。包括包的管理,IO操作,Go语言最大的亮点:高并发,goroutine,channel,反射等。本视频主要为了帮助Go语言的初学者,从零到一的快速入门。学完本套课程,可以学会如果通过包管理Go项目,并发模型,以及并发实现,channel通道如何传递数据,反射等等。
- 127次学习
-
- JavaScript极速入门
- 本套课程将帮助大家迅速掌握JavaScript这门高端的、动态的、弱类型编程语言。知识点简单明了,让你学习0压力,适合新手观看学习......
- 431次学习
-
- Golangmap实践及实现原理解析
- 2022-12-28 505浏览
-
- GoLand调式动态执行代码
- 2023-01-13 502浏览
-
- 试了下Golang实现try catch的方法
- 2022-12-27 502浏览
-
- 用Nginx反向代理部署go写的网站。
- 2023-01-17 502浏览
-
- MySQL主从切换的超详细步骤
- 2023-01-01 501浏览
-
- Mysql-普通索引的 change buffer
- 2023-01-25 501浏览