Tencent / puerts

PUER(普洱) Typescript. Let's write your game in UE or Unity with TypeScript.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

[UE] Bug: quickjs模式关闭时崩溃

9000miles opened this issue · comments

前置阅读 | Pre-reading

Puer的版本 | Puer Version

1.0.5, 1.0.6, 1.0.7

UE的版本 | UE Version

4.27

发生在哪个平台 | Platform

Editor(win)

错误信息 | Error Message

image
1.0.5, 1.0.6, 1.0.7这几个版本都测试过,都有问题

问题重现 | Bug reproduce

quickjs模式如果在JsEnv->Start传入UObject对象到js,那么关闭时JsEnv析构时会报错,但是在v8模式不会报错
报错与Start函数传递UObject对象参数有关,不传递则不会报错

            TArray<TPair<FString, UObject*>> Arguments;
            UEngine* Engine = GEngine;
            UWorld* World = GEngine->GetCurrentPlayWorld();
            World = Engine->GetWorldContextFromPIEInstance(0)->World();
            Arguments.Add(TPair<FString, UObject*>(TEXT("GameInstance"), World->GetGameInstance()));
            JsEnv->Start(Settings.StartScript, Arguments);

新版本的quickjs库会崩,我往回试了下,这个版本没崩,你可以先用这个试试:https://github.com/puerts/backend-quickjs/releases/tag/QJS_240424

甚至早一天编译的都没问题,你帮忙试试:https://github.com/puerts/backend-quickjs/releases/tag/QJS_240603
下载覆盖Plugins\Puerts\ThirdParty\quickjs对应文件

甚至早一天编译的都没问题,你帮忙试试:https://github.com/puerts/backend-quickjs/releases/tag/QJS_240603 下载覆盖Plugins\Puerts\ThirdParty\quickjs对应文件

你先确认下这个版本有没问题

我也碰到,然后环境清理下没崩了,不过用quickjs的新版本会有其它问题,你用这个回退了quikcjs的版本试试,我这里没问题:
https://github.com/puerts/backend-quickjs/releases/tag/QJS_240720_revert_quickjs_version

清理方法:Plugins\Puerts\Binaries\Win64下东西全删了,然后整个工程clean后重现编译。

我也碰到,然后环境清理下没崩了,不过用quickjs的新版本会有其它问题,你用这个回退了quikcjs的版本试试,我这里没问题: https://github.com/puerts/backend-quickjs/releases/tag/QJS_240720_revert_quickjs_version

清理方法:Plugins\Puerts\Binaries\Win64下东西全删了,然后整个工程clean后重现编译。

清理、替换,重新编译之后,
1.0.5还是同样的报错信息
但是1.0.6和1.0.7不会

我先替换这个版本,切到1.0.7版本使用,1.0.5版应该不会使用,只是我提一下我这边测试时它还是存在问题

你们为啥要用quickjs呢?一般ue下很少人用它。
如果因为html5,可以仅html5用quickjs。

你们为啥要用quickjs呢?一般ue下很少人用它。
如果因为html5,可以仅html5用quickjs。

对的,就是在html5中使用。明白了编辑器下就不用。感谢感谢

定位了下新版本quickjs为啥会执行失败。
首先表现的现象是:log.js执行时,报global.puerts是undefined。

定位到是对全局对象设置属性不成功所致。
然后更改代码为JS_SetPropertyStr能够设置成功,JS_SetProperty设置不成功,看quickjs源码怎么都看不出来(unity下quickjs版本用最新的也工作正常)。

JS_SetProperty比较特殊,它是直接在头文件调用JS_SetPropertyInternal实现的,而新版本JS_SetPropertyInternal刚好参数修改了。

于是怀疑是编译缓存的问题,但在VS那Clean了,Plugins\Puerts\Binaries\Win64也删除了都没解决问题。

最后把工程的Intermediate、Binaries,Puerts下的Intermediate、Binaries都删除,重新生成工程后问题解决。