XLua框架搭建——print支持文件名和行号及日志双击重定向

xlua的代码里在使用的日志打印的时候会用print来进行,但是print仅仅是打印输入的数据,而没有对应的文件名信息和行号,如果文件比较多,日志也比较多的话,就会觉得很麻烦。

lua提供了调试类debug,可以获取堆栈等信息,我们可以利用这个类来进行文件名和行号的获取,然后将文件名和行号一起传过去进行打印。设定一定的规范,然后利用前面的文章所讲的日志重定向,在控制台双击日志的时候进行自动打开文件和跳转到指定行号。

首先,我们需要将原来的print函数保存下来

 local rawPrint = print;

然后利用debug获取我们想要的信息

 local info = debug.getinfo(2,"Sl");

关于getinfo的参数,大家可以查阅相关文档,这条语句执行完后我们就可以拿到文件名info.source和行号info.currentline了,然后我们重新组织字符串,调用我们存下来的print语句传入我们重新组织后的字符串即可
该功能的实现会有相应的性能损耗,需要处理好相关情况,区分开发版与发布版,以免拖慢代码执行效率。

在刚才重新组织字符串的时候,我们自定义好规则,比如在数据之前定义格式为Lua:[文件名:行号],这样我们在捕获文件开启时就可以匹配这些字符串,然后调用自己的开启规则。
关于日志重定向不清楚的,可以翻看以前的文章Unity控制台日志开启重定向

看完前面的文章后,回到这边,在GetListViewRowCount里我们根据刚才定义的格式判断condition.StartsWith(“LUA:”),如果是画拆分出文件名和行号。在OnOpenAsset里判断fileName.EndsWith(“.lua”),根据刚才拆分出来的文件名和行号就可以进行跳转了。

由于前面我们在编辑器选择的时候使用的是Intellij idea,在实现这个功能的时候会发现好像跳转失败了,没有任何效果,断点可以发现代码的执行是没问题的,这意味着unity的api无法驱动Intellij idea。

AssetDatabase.OpenAsset(obj, line);

如果是这样,我们就要想另一个办法,查阅Intellij idea的文档,发现可以通过cmd的命令来进行开启及跳转,这就好办了。
参数列表如下

//文件资源目录 --line 行号 文件路径
{0} --line {1} {2}

填入刚才的数据就好了。运行cmd,关于利用c#执行cmd的文章参考Unity调用外部EXE或Shell命令

QQ交流群:517539056

你可能感兴趣的:(Lua学习,xlua,xlua框架,print,行号,打印)