[开发者心得] 【023】排查解决报错的一些常用手段

[复制链接]
1032 |0
喵喵哭唧唧 发表于 2023-3-21 20:15:07 | 显示全部楼层 |阅读模式
本帖最后由 哭唧唧的细狗 于 2023-10-31 11:15 编辑

排查解决报错的一些常用手段

案例1:一段代码只想在客户端执行,但是写好代码后服务器上居然报错了,很奇怪
image.png

仔细一看isClient没打括号,导致了想要做的事情在服务器和客户端都执行了,如果该内容只有客户端能正确执行,服务器就铁定会报错
解决方案:在VSCode的设置里面,把“完成函数的参数签名”这个选项打开哈,这样如果你调用的是函数,会自动帮你补全括号和参数的

image.png


案例2:find找到一个对象并且设置了位置移动,但是没生效

image.png


细心的你一定发现了,你这个对象勾选了静态,就算能找到但是也不能操作对象啦

image.png


更细心的你一定还发现了一个细节,场景上不是有3个正方体么,正常来说渲染合批的时候,用对象管理器里的guid应该找不到的丫

没错,确实如你所说,真相是这样的,这三个正方体它们的材质都是不一样的,因此它们仍然能被原guid找到哦


image.png


知识点来了:find能找到没有进行渲染合批的静态对象,但是不能操作它们
静态对象的渲染合批与材质有关,当有多个相同材质的对象时,如果被设置为静态对象,那么它们将被合并,使用find和原guid查找将失败

案例3:操作一个对象不存在的对象

尝试去获得一个guid为【6666】的对象,但是场景里并没有它

image.png


想要操作一个不存在的对象,打印它的name时,就会报下边的截图里的错误

image.png


这是一种特别常见的问题,如果遇到了TypeError: Cannot read property "xxxx" of undefined
那么可以优先猜测是否这个对象是不是为空了,我们操作了一个错误的对象

代码报错如何查找
代码报错分为编译报错和运行报错

1.编译报错:编辑器里自动编译的处会有对应编译失败提示



image.png

并且能在\MetaWorldSaved\Saved\Logs路径下,可以在MW.log中通过【MWTSCompileFailed】搜索到相关信息


image.png

  • 解决方法:编译失败窗口里和MW.log文件里可以直接定位到哪个脚本的哪行代码出问题,修改对应错误即可

2.运行报错:MetaWorldSaved\Saved\MetaWorld\MWLogs路径下有相关的Client.log和Server.log文件

image.png

可以在相关日志中通过【TypeError】搜索到相关信息:


1. 前跟JS Execution Exception这种情况

image.png


image.png


2. 以及前跟Error的这种情况

  • image.png



    如果是下边这种请,只有Error没有TypeError的,这类信息是可以不管的

    image.png


    如何追踪到问题代码:

  • image.png


找到项目目录下的dist文件夹,用编辑工具打开game.js文件,我们找到第1种情况TypeError中提示的第58行


image.png


其对应的是NewScript.ts代码中对应的代码,分析发现(通过打日志,下断点等方式分析问题),原因是go对象没有被找到,场景里可能根本没有一个guid为555的对象(亦或者我们应该通过异步查找asyncFind),最终运行时操作一个undefined的对象就报错误了


image.png

回复

使用道具 举报

热门版块
快速回复 返回顶部 返回列表