Comments (9)
我今天看了下,上面方案是不行的。从类型来说 UE4.FVector 是 function , 而 UE4.FVector() 是返回值的类型。一些成员类型的变量也不能直接加() ,比如 UE4.UKismetSystemLibrary 。
因为crash 都发生在 UE4 提供的一些方法中,我可以做一些工作,让用户主动查阅需要的变量,避免不经意查询了 UE4 的提供方法。
从我自己的测试状况,造成 crash 的行为主要是
- 鼠标不小心悬停在了会 crash 的方法上(会进行变量查询,然后 crash)
- 查询所有 global 变量(因为其中包含 UE4.FVector 等 userdata)
所以我准备: - 禁止鼠标悬停查询变量
- 停止在变量展示区 展示全部 global 变量
这样查询全局变量会稍麻烦一点,需要使用 watch 或调试控制台输入变量名查询,如下
但只要用户不主动查询 UE4 提供的方法,应该都是安全的
from luapanda.
我们定位了一下问题,crash发生在LuaPanda.lua processWatchedExp函数2575行
var.value = tostring(retString)
这行的作用是把观察变量取得的变量值,转换为string。之后序列化发给前台以便展示。
也就是一些系统变量在做tostring转化时,出现了问题。
必现办法是:比如在watch中加入UE4.FVector,调试器就会立刻crash掉。
或者在用户lua代码中加入 tostring(UE4.FVector); 运行工程,ue也会crash.
问题可能的原因是unlua目前对一些变量的tostring没有处理好,我们后面看下有没有办法绕过
from luapanda.
我们定位了一下问题,crash发生在LuaPanda.lua processWatchedExp函数2575行
var.value = tostring(retString)
这行的作用是把观察变量取得的变量值,转换为string。之后序列化发给前台以便展示。
也就是一些系统变量在做tostring转化时,出现了问题。必现办法是:比如在watch中加入UE4.FVector,调试器就会立刻crash掉。
或者在用户lua代码中加入 tostring(UE4.FVector); 运行工程,ue也会crash.问题可能的原因是unlua目前对一些变量的tostring没有处理好,我们后面看下有没有办法绕过
请问现在有解决的办法吗?
from luapanda.
请问现在有解决的办法吗?
想先说下调试器对变量进行 tostring() 的原因:
调试器有 lua 端和 vscode 插件两部分,他们之间通过tcp通信。遇到断点时,调试器 lua 端把获得的变量信息序列化后发给 VSCode 端,VSCode插件把这些信息反序列化后展示。我们这里调用 tostring 的目的就是对获得的变量进行序列化,以便传输。
所以我认为这里有两种可能,一种是 unlua 修复变量的 tostring() 方法。另一种是 unlua 提供他们自己的的变量序列化方法,我们做一下适配也可以解决。
就这个问题我理解比较依赖 unlua 的处理,核心是找到一个不 crash 的变量序列化方法。
感谢提问,我们也会关注这个问题~
from luapanda.
请问现在有解决的办法吗?
想先说下调试器对变量进行 tostring() 的原因:
调试器有 lua 端和 vscode 插件两部分,他们之间通过tcp通信。遇到断点时,调试器 lua 端把获得的变量信息序列化后发给 VSCode 端,VSCode插件把这些信息反序列化后展示。我们这里调用 tostring 的目的就是对获得的变量进行序列化,以便传输。所以我认为这里有两种可能,一种是 unlua 修复变量的 tostring() 方法。另一种是 unlua 提供他们自己的的变量序列化方法,我们做一下适配也可以解决。
就这个问题我理解比较依赖 unlua 的处理,核心是找到一个不 crash 的变量序列化方法。
感谢提问,我们也会关注这个问题~
我测试了一下,这是因为UE.FVector这个用法不会走FVector的构造,导致调用tostring的时候传递进去的是一个空指针。而UE4.FVector()就可以。
这样是OK的:
function Cube_Blueprint_C:ReceiveBeginPlay()
print(tostring(UE4.FVector()))
end
这样就不会调用FVector_New,从而在调用tostring的时候会crash:
function Cube_Blueprint_C:ReceiveBeginPlay()
print(tostring(UE4.FVector))
end
from luapanda.
收到。根据上面结果,我的初步想法是:在调试器获取到要展示的变量后,通过某些方式(按变量名或者type()等)判断它是 lua 基本类型还是 unlua 的 UE4.xxx 类型,如果是基础类型,就直接用tostring()序列化。如果是UE4.xxx, 那么调用它一下再使用tostring。
from luapanda.
我在 master 分支提交了一个 vsix 文件夹,按上面的思路打了个包,可以安装上试下。
下载到 vsix 文件后,可以按下面的办法安装
from luapanda.
我在 master 分支提交了一个 vsix 文件夹,按上面的思路打了个包,可以安装上试下。
下载到 vsix 文件后,可以按下面的办法安装
好的,我试一下~
from luapanda.
unlua 的更新似乎解决了这个bug, 参见下方相关issue
from luapanda.
Related Issues (20)
- 断点以后,显示变量的值不对,所有的变量值都是一样的,这应该是一个BUG HOT 1
- 调试器没有找到文件 lua.lua 。 请检查launch.json文件中lua后缀是否配置正确, 以及VSCode打开的工程是否正确 HOT 4
- 协程coroutine.wrap()创建,断点断不住 HOT 4
- Windows下配置luanch.json启动参数program时, 路径带有空格则启动失败. HOT 1
- Socket 无法通信导致ReGetSockFail HOT 1
- libpdebug.lua找不到是什么原因 HOT 1
- UE5蓝图使用Luajit,在Load的时候会直接崩溃,你们有碰到类似的问题吗? HOT 1
- 关于 lua 5.3/5.4 无法建立连接的问题 HOT 1
- 打开包含大量文件的目录,插件会coredump HOT 3
- 关于Arm架构 lipDebug支持的问题 HOT 1
- 关于在5.4下使用luapanda
- 反转C-S后,内网环境下,远程调试连接不上 HOT 1
- Lua Debug 插件和 LuaPanda 插件 attach 模式会互相冲突,导致无法断点,或者断点失效问题 HOT 1
- 更新到vscode 1.82后,插件报错无法运行 HOT 5
- 使用了distinguishSameNameFile=true,truncatedOPath过滤公共串后,同名文件正则识别错误(没有处理"["、"]") HOT 2
- 没有 用于IntlliSense的cpp 菜单 HOT 2
- 希望在独立脚本执行的lanuch配置中,可以使用args的参数 HOT 3
- 打开LuaPanda会出现这个问题 Connection to server got closed. Server will not be restarted. HOT 1
- F12 not work HOT 1
- 调试递归调用时,局部变量获取错误 HOT 5
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from luapanda.