unity调试lua工具和方法_unity lua debug-程序员宅基地

技术标签: # Lua  

前言:可以编写lua的工具有很多,比如subline,zerobrance studio, luastudio,decode,babelua,EmmyLua等,但是真的很方便调试lua的工具却很少。以前用的比较多的工具是luastudio,这是款收费软件,还不好破解,网上的各种破解版几乎运行几分钟就会自动闪退,所以有钱的朋友可以买一个用下。现在发现一款基于IntelliJ IDEA的EmmyLua插件。该插件功能非常完整,包括断点调试、自动提示、代码跳转、智能重命名等,可以极大地提高Lua编程的速度。界面也比较舒服。最主要的是免费的,吸引力比较强。所以写下本编文章记录下,也希望可以给看到本篇博客的朋友一点帮助。

特别提醒:由于我在写这篇博客时,最新的IntelliJ IDEA是2017系列,但是这个版本的软件存在一个致命的bug,那就是当目录下面的文件太多(我项目中是4500多个),idea建立index时就会报错,然后一直卡在那不动。必须排除一些文件才能index完毕,而排除的文件是不能断点的,这样就给调试lua造成一定的困扰和不方便。解决这个问题的方法就是降级到2017以下或者升级到2017以上。这里我选择的是安装IntelliJ IDEA2018.3.4版本,并且配合emmylua1.2.6-idea182版本的lua环境,完美解决文件太多时index卡死的问题。下面的软件安装指南流程都是一样的,只是换成对应版本就行,这里我就不改了。

安装IntelliJ IDEA
1.下载地址为:https://confluence.jetbrains.com/display/IntelliJIDEA/Previous+IntelliJ+IDEA+Releases,这里选择的是2017.3.5 Ultimate版本。
2.启动安装程序,流程图如下所示:
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

破解IntelliJ IDEA:这里选择的是破解补丁激活方法,过程如下:
1.破解补丁下载地址为:https://pan.baidu.com/s/1KUFUflJleyHnHZAllnzXUQ 密码:3493。并将下载的破解补丁放在你的安装IDEA下面的bin的目录下面。
2.IDEA的bin目录下面有2个文件 : idea.exe.vmoptions和idea64.exe.vmoptions。用记事本打开,在上述两个文件的最后一行均加上-javaagent:IDEA安装目录\bin\破解补丁文件名.jar
3.获取激活码地址为http://idea.lanyus.com/,获取过程如图所示:
这里写图片描述
4.启动IDEA,第一次进入会提示激活,选择Activation Code,并输入如上3步骤中获取的激活码,流程如图所示
这里写图片描述
这里写图片描述
5.软件启动,进入Help,选择About,页面显示December 31,2099到期,完成激活。如下图:
这里写图片描述

汉化IntelliJ IDEA:这里选择的是补丁汉化方法,过程如下:
1.在主界面选择File → Settings → Appearance&Behavior → Appearance → 勾选Override default fonts by(not recommended)。其中Name选择任意一个中文字体,否则中文显示乱码,这里选择的是Microsoft YaHei。如图所示:
这里写图片描述
2.汉化补丁下载地址为:https://pan.baidu.com/s/1QUpLOgMrVtC0PSfwGjOd0g 密码:5d7t。并将下载的汉化补丁放在你的安装IDEA下面的lib目录下,重启IDEA即可完成汉化。
3.有时候汉化版的界面不能显示,此时如果想取消汉化版,只需将IDEA下面的lib目录中的汉化插件移除即可。如果想要有汉化版,只需将汉化插件放在你的安装IDEA下面的lib目录下即可。

安装lua for windows插件:lua for windows是lua环境开发的运行时文件,安装步骤如下:
1.下载VC++2005运行时库,下载地址为:https://pan.baidu.com/s/1QAPmJ1zhHDphqakcSWaiew 密码:j7s9。只需要安装里面的vc++2005运行时库就行了。
2.下载lua for windows插件,下载地址为:http://luaforge.net/projects/luaforwindows,我这里使用的是LuaForWindows_v5.1.4-35。一般安装完后自动设置环境变量的,没有设置就手动设置一下。比如我的安装目录是lua5.1,在环境变量的Path中加入D:\Progma\lua5.1;D:\Progma\lua5.1\clibs;
3.使用cmd验证是否安装成功,流程如下图所示:
这里写图片描述
这里写图片描述
安装EmmyLua插件:建议直接在IDEA工具内搜索插件安装(当然也可以下载插件到硬盘安装,插件地址为:https://plugins.jetbrains.com/plugin/9768-emmylua),这里选择的EmmyLua版本是1.2.2,安装完需要重启IDEA。流程如图所示:
这里写图片描述

配置EmmyLua事项:在使用EmmyLua调试lua前,需要做一些工程配置,常见配置如下:
1.关联指定文件:比如将*.txt识别成lua文件,如图所示
这里写图片描述
2.忽略指定文件:如图所示
这里写图片描述
3.代码提示忽略大小写:如图所示
这里写图片描述

创建Lua项目:创建流程如下:
1.New-Project,然后next,填项目名、路径,点击finish。
2.在项目视图的src文件夹New一个Lua文件。如:Test.lua。
3.配置SDK:配置方式如图所示
这里写图片描述
4.将模块已有源码目录设为Sources目录:菜单进入File -> Project Structure, 选择 Modules -> Sources -> Add Content Root -> 选择源码根目录-> Mark as: Sources。如图所示:
这里写图片描述
5.在Test.lua文件中加入一句print(“it works”)语句,然后点击Run就可以运行了。运行结果如图所示:
这里写图片描述
如果运行不成功,就需要检查SDK配置是否正确。

本地调试Lua项目:调试流程如下:
1.调试普通Lua项目时只需在对应地方打断点就行,然后点击Run->Debug Test.lua或者工具栏中的Debug图标就可以启动调试了。调试结果如图所示:
这里写图片描述
2.调试unity引擎Lua项目时只需在对应地方打断点就行,然后点击Run -> Attach to Local Process, 选择 Unity.exe,就可以启动调试了。调试流程如图所示:
这里写图片描述
这里写图片描述

远程调试Lua项目:调试流程如下:
1.配置Remote调试设置,如图所示:
这里写图片描述
2.点击 + 选择并创建 Lua Remote(Mobdebug) 配置,如图所示:
这里写图片描述
3.设置好相关参数后点击OK,如图所示:
这里写图片描述
4.点击右上角debug按钮并注意IDEA控制台LOG输出,如图所示:
这里写图片描述
这里写图片描述
5.远程调试通信依赖于luasocket模块,所以被调试的程序需要支持luasocket。这里以tolua插件开启luasocket进行介绍,slua以及ulua等插件开启luasocket方式请参照对应官网介绍。tolua插件中开启luasocket的方式如下:
一.将LuaClient中的openLuaSocket设置为true,如图所示:
这里写图片描述
二.LuaClient中自动将luasocket添加到lua虚拟机堆栈中,如图所示:
这里写图片描述
这里写图片描述
6.远程调试内核基于mobdebug.lua,所以被调试的程序需要支持mobdebug.lua。下载地址为:https://pan.baidu.com/s/1xbLSgM_MGjBzScsDOoVoLg 密码:laqn。此时将该文件放在入口文件同级目录下,要不然会报找不到mobdebug的错误。
7.在入口文件中加入require("mobdebug").start("localhost", 8172) --默认值为 "localhost", 8172 也可以设置自己想要的ip和port
8.unity启动场景中加入tolua插件的LuaClient.cs文件,运行unity目标程序时会自动打开刚才配置好的luasocket库并且执行入口文件中的入口方法,此时idea控制台出现Connect提示,表明远程连接成功,此时就可以断点调试了。如图所示:
这里写图片描述
这里写图片描述

调试失败相关问题排查
1.远程调试运行目标出现“module ‘mobdebug’ not found:no field package.preload[‘mobdebug’]”日志时,此时要检查mobdebug.lua文件是否放入到模块源代码根目录Source中主入口文件(如Main.lua文件)相同层级下。
2.远程调试运行目标出现Connected 日志有,但断点无效时,此时要检查目标程序在运行时提供的文件名与源码文件的文件名一致(致少除了后缀名的前面的部分一致)以及是否将模块源码目录设为Sources目录。
3.本地调试出现断点无效,IDEA控制台窗口出现 xxx not found 日志时,此时要检查是否将模块源码目录设为Sources目录。
4.本地调试出现附加到目标程序失败,Error: LuaInject.dll could not be loaded into the process日志时,此时要检查是否被杀软、安全卫士拦截了注入过程。
5.本地调试出现lua.exe not found日志时,此时要检查SDK配置是否正确。

EmmyLua注解提示功能:emmylua中提供的注解功能可以让代码提示更加清晰。由于注解实际上是lua里面的注释,所以注解功能不会影响lua任何运行效率。具体注解使用参照地址:https://pan.baidu.com/s/1YdUJH8JNWB1zA9ZjD8L-Vg 密码:q5s1

tolua导出unity类提示功能:由于emmylua中包含了lua api的库,所以对lua api以及自己编写的lua类都可以进行代码提示,加上注解功能后,它们的代码提示就十分清晰。但是unity相关导出类的代码详细提示功能却没有,此时就需要我们做兼容支持。流程如下:
1.编写tolua中unity导出类的注解类ToLuaEmmyAPIGenerator.cs文件。文件地址为:https://pan.baidu.com/s/1-mdnPcwxmu02fm7H7iUPWw 密码:6po5。将下载好的ToLuaEmmyAPIGeneratorwen.cs文件放在unity的editor目录下。
2.打开unity,执行Lua->Gen API for EmmyLua,此时会生成unity导出类的注解类文件,而且默认生成目录为ProjectName/LuaAPI。将该目录打成zip包,这里命名为UnityLuaAPI.zip,这里提供生成好的UnityLuaAPI.zip文件,文件地址为:https://pan.baidu.com/s/18WUmiKbm8foiTPuMsD4fMA 密码:x7gf。
2.在IDEA的Module中导入下载好的UnityLuaAPI.zip库文件。导入流程如图所示:
这里写图片描述
这里写图片描述
3.编写测试文件,查看unity相关api是否可以智能代码提示。如图所示:
这里写图片描述
4.这里导出的unity api只是另外生成的一份lua版本并加入到idea的依赖库里面。主要是方便使用注解来给出unity api的提示。所以最终调用时还是使用tolua导出到lua虚拟机上面的相关接口实现。

unity控制台日志跳转功能:emmylua自身支持lua文件之间的相互跳转,但是在unity的控制台里面的lua日志就不能跳转。所以如果想在unity的控制台里跳转打印的日志,必须额外做兼容处理。相关流程如下:
1.编写unity控制台中日志跳转类ConsoleToLuaIDE.cs文件。地址为:https://pan.baidu.com/s/1d-HyQj6Eeebys0FbScj3jw 密码:qomw。将下载好的ConsoleToLuaIDE.cs文件放在unity的editor目录下。
2.设置好idea的启动路径和模块源代码根路径,如图所示:
这里写图片描述
3.点击unity控制台日志,查看是否进行跳转。如图所示:
这里写图片描述
这里写图片描述

IDEA中常用的快捷键:熟悉常用的快捷键对我们编写代码可以起到事半功倍的作用。这里列举常用的快捷键如下:
1.ctrl + f12:显示代码大纲。
2.ctrl + n:导航到类定义。
3.ctrl + shift + n:快速打开文件。
4.ctrl + shift + alt + n:导航到任意符号(全局变量,类以及类中的方法等)。

注意
1.更对emmylua学习资料可以加入官方qq号29850775,里面有很多emmylua相关学习资料。也可以在emmylua的在线文档https://emmylua.github.io/或者视频:https://pan.baidu.com/s/12knNlnqDraw3r8zSXQMMfQ 密码:qxup,来学习更多具体用法。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/zjz520yy/article/details/79919267

智能推荐

Word插件开发

创建一个新的 Office 插件项目:在 Visual Studio 中,选择"文件" -> “新建项目”,然后在模板中选择"Office/SharePoint",选择适当的 Office 插件项目模板,如 Word 插件、Excel 插件或 PowerPoint 插件。设计用户界面:在解决方案资源管理器中,打开你的插件项目,并在其中打开相应的 Office 文件(如 Word 文件、Excel 文件或 PowerPoint 文件)。你可以在 Office 应用中测试插件的功能,并在开发过程中进行调试。

便携式iv检测仪解析

在应用场景方面,便携式IV功率测试仪广泛应用于光伏电站的日常运维、光伏组件生产过程中的质量控制以及光伏项目的前期评估等环节。在光伏电站运维中,定期对光伏组件进行IV测试,可以及时发现性能下降或损坏的组件,为电站的运维提供有力支持。首先,从工作原理来看,光伏电站便携式IV功率测试仪通过模拟太阳光照射光伏组件,并测量组件在不同电压下的电流输出,从而绘制出IV曲线。此外,测试仪还可以计算光伏组件的功率输出、转换效率等参数,为用户提供全面的性能评估。

postgresql 索引之 hash_load_categories_hash postgres-程序员宅基地

文章浏览阅读3.6k次。os: ubuntu 16.04postgresql: 9.6.8ip 规划192.168.56.102 node2 postgresqlhelp create indexpostgres=# \h create indexCommand: CREATE INDEXDescription: define a new indexSyntax:CREATE [ UNIQUE ..._load_categories_hash postgres

face++实现人脸识别及人脸相似度对比_face++人脸识别 html5-程序员宅基地

文章浏览阅读4.8k次。使用face++,先获取key和secret下方是人脸识别,还添加了画出人脸轮廓的正方形下方是人脸识别,还添加了画出人脸轮廓的正方形 import requests#网络访问控件 from json import JSONDecoder#互联网数据交换标准格式 import cv2 as cv#图像处理控件 http_url ="https://a..._face++人脸识别 html5

desencrypt java md5_Java实现DES加密与解密,md5加密以及Java实现MD5加密解密类-程序员宅基地

文章浏览阅读322次。很多时候要对秘要进行持久化加密,此时的加密采用md5。采用对称加密的时候就采用DES方法了import java.io.IOException;import java.security.MessageDigest;import java.security.SecureRandom;import javax.crypto.Cipher;import javax.crypto.SecretKey;im..._java desencrypt.encrypt(pass)

BZOJ 2818 欧拉函数,线性筛_线性筛预处理质数表, 并求出欧拉函数, 预处理前缀和即可 bzoj2818boj-程序员宅基地

文章浏览阅读145次。题目链接:https://www.acwing.com/problem/content/description/222/给定整数N,求1<=x,y<=N且GCD(x,y)为素数的数对(x,y)有多少对。GCD(x,y)即求x,y的最大公约数。输入格式输入一个整数N输出格式输出一个整数,表示满足条件的数对数量。数据范围1≤N≤10^7输入样例:4..._线性筛预处理质数表, 并求出欧拉函数, 预处理前缀和即可 bzoj2818boj

随便推点

UVA 12534 - Binary Matrix 2 (网络流‘最小费用最大流’ZKW)_uva12534-程序员宅基地

文章浏览阅读687次。题目:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=93745#problem/A题意:给出r*c的01矩阵,可以翻转格子使得0表成1,1变成0,求出最小的步数使得每一行中1的个数相等,每一列中1的个数相等。思路:网络流。容量可以保证每一行和每一列的1的个数相等,费用可以算出最小步数。行向列建边,如果该格子是_uva12534

免费SSL证书_csdn alphassl免费申请-程序员宅基地

文章浏览阅读504次。1、Let's Encrypt 90天,支持泛域名2、Buypass:https://www.buypass.com/ssl/resources/go-ssl-technical-specification6个月,单域名3、AlwaysOnSLL:https://alwaysonssl.com/ 1年,单域名 可参考蜗牛(wn789)4、TrustAsia5、Alpha..._csdn alphassl免费申请

测试算法的性能(以选择排序为例)_算法性能测试-程序员宅基地

文章浏览阅读1.6k次。测试算法的性能 很多时候我们需要对算法的性能进行测试,最简单的方式是看算法在特定的数据集上的执行时间,简单的测试算法性能的函数实现见testSort()。【思想】:用clock_t计算某排序算法所需的时间,(endTime - startTime)/ CLOCKS_PER_SEC来表示执行了多少秒。【关于宏CLOCKS_PER_SEC】:以下摘自百度百科,“CLOCKS_PE_算法性能测试

Lane Detection_lanedetectionlite-程序员宅基地

文章浏览阅读1.2k次。fromhttps://towardsdatascience.com/finding-lane-lines-simple-pipeline-for-lane-detection-d02b62e7572bIdentifying lanes of the road is very common task that human driver performs. This is important ..._lanedetectionlite

【数据结构】静态表查找之顺序查找、二分查找、分块查找_读取表元是什么意思-程序员宅基地

文章浏览阅读4.1k次,点赞8次,收藏23次。​通过一定的方法找出与给定关键字相同的数据元素的过程叫做查找。也就是根据给定的某个值,在查找表中确定一个关键字等于给定值的记录或数据元素。_读取表元是什么意思

如何设置交易滑点?精确到tick 测算期货冲击成本(附源码)_滑点设置多少合适-程序员宅基地

文章浏览阅读8.3k次,点赞4次,收藏18次。我们在非撮合回测模式下,因为无法获知交易价格当时的真实盘口价差、挂单数量,常主观设定一个滑点均值,比如针对螺纹钢等合约,设置 1 跳,针对某些交易不活跃的品种,设置 2 跳。但是这种近乎拍脑袋的方法并不精确。我们今天尝试通过简单的辅助工具,实现尽可能接近准确的 tick 级别滑点设置,代码已写好,不用编程也可获得结果。_滑点设置多少合适

推荐文章

热门文章

相关标签