Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

有userdata的时候会崩游戏 #64

Closed
Enzojz opened this issue Mar 26, 2020 · 5 comments
Closed

有userdata的时候会崩游戏 #64

Enzojz opened this issue Mar 26, 2020 · 5 comments

Comments

@Enzojz
Copy link

Enzojz commented Mar 26, 2020

就是如果scope里面如果存在userdata的话,在断点下来之后游戏就会马上崩

希望可以有方法注入userdata的自定义解析函数

@stuartwang
Copy link
Collaborator

stuartwang commented Mar 27, 2020

ud崩溃就我所知有两种可能性

  1. 使用的框架是unlua
    问题表现是 ue 直接崩溃。参见 使用luapanda调试unlua工程时候,偶现crash #41 以及关联 issue。需要试下unlua 的更新看能否解决。
  2. 其他情况
    问题表现是报 lua error, 可以参见这个pr
    https://github.com/Tencent/LuaPanda/pull/48/files
    它的作用是查阅ud元表是否有__pairs, 如果有,利用__pairs遍历ud,展示其成员。 我们发现有些框架给ud加上了错误的__pairs ,导致遍历失败。遇到这里错误,可以注释掉 2339 -2360行
    image
    如果想要自定义调用ud解析函数应该也是修改这里

@Enzojz
Copy link
Author

Enzojz commented Apr 14, 2020

我调试的游戏貌似是自己写的ud结构(游戏开发商自己写的引擎),所以我也不太清楚细节。。一般UD里面有一些数组什么的,需要用#调用长度然后遍历,有几个数据是固定长度的数组所以连#也没有,好像没有实现遍历器。

@stuartwang
Copy link
Collaborator

如果游戏会直接崩溃的话对应了第一个问题
调试器为了和展示端传输数据,会把ud做tostring处理。之前我们发现有的框架在做这种处理的时候会崩溃,导致游戏直接crash。这种情况主要依赖引擎修复,调试器没有什么好的处理办法,唯一能做的就是尽量不展示ud,可以参见 #41 的解决方案。但这并非最终的办法,也只能降低crash概率,最终还是要引擎修复处理。

如果是是报lua error 错误但游戏没有崩溃,就按第二个问题的方案操作试下。

@lzxcs
Copy link

lzxcs commented Apr 27, 2020

ud崩溃就我所知有两种可能性

  1. 使用的框架是unlua
    问题表现是 ue 直接崩溃。参见 使用luapanda调试unlua工程时候,偶现crash #41 以及关联 issue。需要试下unlua 的更新看能否解决。
  2. 其他情况
    问题表现是报 lua error, 可以参见这个pr
    https://github.com/Tencent/LuaPanda/pull/48/files
    它的作用是查阅ud元表是否有__pairs, 如果有,利用__pairs遍历ud,展示其成员。 我们发现有些框架给ud加上了错误的__pairs ,导致遍历失败。遇到这里错误,可以注释掉 2339 -2360行
    image
    如果想要自定义调用ud解析函数应该也是修改这里

关于2.其他情况,我这里有个临时的解决方案:修改__pairs遍历ud这一部分,修改如下:
image
主要就是通过Unlua中TArray,TSet,TMap的ToTable()方法,把ud转成table然后遍历。

@stuartwang
Copy link
Collaborator

为了避免这种问题, 3.2.0 版本开始,LuaPanda.lua 加入了
local traversalUserData = false;
由用户设置是否展示 ud 内容,后续继续研究彻底解决问题的办法

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants