preloadscene回调有几率不会执行的问题

场景切换时先使用preloadscene 在回调里再去调用cc.director.loadScene。
之前一直都是正常的。
后来发现再勾选场景自动释放之后 来回切换的时候 有几率不会触发回调,而且几率好像是和场景的大小有关,大的场景只要切换几次就会出现这种情况。没有任何错误和异常抛出。
请问有没有办法能知道导致不执行回调的原因嘛?
版本1.5.2

load注册了onProcess totalcount和completecount 同一个场景在切换时出现该情况的时候 totalcount不等于completecount

preload 的回调不触发?出错的几率是多大?有报错吗?能不能给个 demo?

项目必现, 尝试搞个简单的demo没有重现, 应该是跟场景的复杂度相关的。
目前可以100%重现, 来回切3次场景, 必然会出现加载过程中断。
----- Completed by pipeline xxx.json, rest: 70
这个xxx.json和70也是固定的。
对比正常的日志, 下面本来应该由pipeline flowOut一个png, 但是没有。

问题定位:

C++代码中异步加载Image的线程卡在了分析png数据的函数中, 导致后续逻辑中断.

Image::initWithPngData 中调用 png_read_info, 此函数直接卡死, 不再返回. 卡死后中断线程观察线程栈如图:

后面的现象就好解释了, 这里不出去, 异步加载png的callback不会被调用, js的pipeline就卡住了.

由于代码在png库中, 我没法继续追, 请引擎组接手.

麻烦把这个 png 放到 demo 的场景里,再把 demo 提交上来。

嗯, demo没重现问题, 干脆自己继续查, 应该可以终结此贴了.
通过加入libpng库, 跟踪代码, 发现原因如下:

  1. libpng分析png数据的时候很多图会有png_sRGB_checks[i].is_broken != 0的情况(不知道这broken严不严重, 需不需要修改资源图, jare知道的话请指教), 导致libpng需要输出警告信息, 而警告信息输出的目标是stderr.
  2. 而我们在使用simulator的时候没有开console窗口, 那么就不会执行freopen stderr的操作.
  3. 这样当stderr的缓存被写满, 就出现了卡死的现象. 这个问题是必现的, 可能其他项目还没有写这么多内容到stderr上吧, 否则必然会碰到.
    解决方案:
    在没有console窗口的情况下, 加上对stdout和stderr的重定向.

PS. Jare大大, 回答我一下为啥1.6.2在windows下用vs code无法调试Native啊, 一直retry连接.

感谢你的帮助,所以说这是一个只有模拟器才会出现的 bug,是吗?或许我们应该把 stderr / stdout 重定向到 cc.log
另外你说的调试问题,现在只能用 Firefox 了,VSCode 从 1.6 开始好像就跪了……

其他工程我没看 最好确认一下没有类似的问题 谢谢 Jare的回复 再问一下用firefox调试native有介绍配置和操作方法的文章吗

目前没有的文档还没更新,我帮你催一下 @panda @pandamicro

@panda
@pandamicro

你看下调试的时候有没有报很多SRGB的警告, 我前段时间也碰到过,删掉所有图片的SRGB的属性就好了

好的 谢谢提示