stuartwang

Results 47 comments of stuartwang

已优化. 目前对变量名,变量值,LuaPanda.printToVSCode 打印的日志在传输过程中做 base64

这个优化准备在3.2.0版本暂时移除,原因是为了保持低版本兼容性。如果日志中或者变量名中可能出现异常字符,建议参考上面的提交先自行加上代码并打包。 也可以手动去除出现问题的日志。 后面的版本会把这个特性加上,但需要做更多的兼容处理

感谢反馈~ 我们初步做验证,在__gc中打印堆栈是有数据的 stack traceback: ./x1.lua:69: in function [C]: in function 'collectgarbage' ./x1.lua:72: in main chunk [C]: in ? 但是调试器sethook设置的钩子中,lua虚拟机没有把__gc函数信息传过来。 调试器中能拿到的信息如下: ./LuaPanda.lua:1643: in function 'LuaPanda.debug_hook' [C]: in function 'collectgarbage' ./x1.lua:72: in...

我看到截图中 blood_balance 文件大纲视图是空的,这说明插件遇到了错误。这里有两种可能 ![image](https://user-images.githubusercontent.com/16960038/82165272-ff384800-98e6-11ea-85ef-67f7134f264a.png) 1. 是插件在启动时出错了,这种情况下插件功能失效,所有文件的大纲都会为空。我们遇到出现这种情况的案例是项目中文件名包含中文,导致初期建立索引时读取文件名出错。 如果所有文件都没有大纲,那应该就是本问题。可以看下 console 中是否有什么错误提示,导致插件运行不起来。 2. 是单文件分析失败。代码提示插件运行的一个步骤是把文本转为AST , 这个功能借助luaparser完成。当本文件中有错误时,则转换失败,本文件中只有部分或完全没有符号,影响代码提示。 如果只是某个文件没有符号,尝试看一下文件中是否有lua error, 把文件修改为没有lua error的状态看下符号是否生成。

感谢补充,我了解了。应该是静态语法分析在处理这种模拟继承的语义时,支持的不好,导致没有分析出 Test()的返回值从而确定 test 的类型。 后面我看能否花些时间再优化下

我试了一下,这个提示的原因是调试器进程没有启动,所以插件和调试器进程没有连接上,可以按如下操作 1. 启动插件client + server, 报如上错误,确认后不要关闭[Extension Development Host]窗口,用它打开一个含有lua的文件夹 2. 停止主窗口调试, 再次用client + server打开。Vscode在发现lua文件后,lua调试器金城江就自动启动了,之后在[Extension Development Host]窗口创建launch.json , 运行就可以开始调试插件

我又试了下,其实只要进行第一步,加载到lua文件,插件就会启动了

看起来是因为调试器获取到的文件名是lua, 这个名称应该是错误的。 加载lua文件时,接口会要求传入一个文件名,这个名称最终被调试器hook捕获,作为断点判断的依据。可以看一下框架这里传入的文件名是否有错误 ![image](https://user-images.githubusercontent.com/16960038/175304469-ea454ff5-784e-4200-89c9-f6018a518b74.png)

感谢,问题收到,我最近测试下看能否解决

![image](https://user-images.githubusercontent.com/16960038/72400240-99df1980-3783-11ea-9818-ed51351edce0.png) 我今天测试了下,pcall 应该没有问题,问题出在 load 的处理上。LuaPanda.lua的real_hook_process函数中,跳过了对代码段的处理,无法读到内部变量的原因应该是调试器没有进入代码段的栈内部。 ![image](https://user-images.githubusercontent.com/16960038/72400391-01956480-3784-11ea-8953-272efe57fd3c.png) 有一种方案是把代码段写成一个临时文件,以便调试。但可能会降低调试效率。后面我们在思考一下如何处理,感谢提出问题~