Unity Bug解决分析思路
文章目录
- 前言
- 异常分类
- 下面的异常我将按照不同种类给予不同的标志数字
- 1-空引用异常
- 1-2 物品显示与隐藏异常
- 2- 1KeyNotFound 异常
- 3 异常
- 函数之间的关系
- 注意事项
- 感言
前言
一般来说,新手遇到bug会很苦恼,而且打击自己的学习积极性。我在看完一套学习视频后,自己关掉,然后看自己能不能完完全全的再写出来,并且尽力让他趋于完美。其实这样的话,我相当于把代码写了两遍,看视频的时候跟着敲了一遍,自己又写了一遍。虽然苦,但是乐在其中
异常分类
- 我将异常分为四种
- 在控制台上双击可以定位的异常
- 这种异常也许是由于上下文引起的
- 也有可能属于蝴蝶效应,间接引发的
- 无法定位的异常
- 用二分法进行注释,然后排查是哪句话出现的错误,结合错误类型进行定位
- 没有任何报错,但就是实现不了想要的功能
- 首先将功能所涉及的函数全部Log,查看是否全部执行
- 将函数中所涉及的关键变量Log出来,查看其变化
- 根据变量所显现出来的问题,进一步锁定出现问题的代码
- 然后将代码打上断点,运行此处,查看变量的情况。做到这一步基本就可以解决问题了
- 逻辑错误
- 这种错误最低级也最致命,没有解决办法,只能多思考
下面的异常我将按照不同种类给予不同的标志数字
1-空引用异常
- 当时我对代码进行了重构,该删的删,该加的加,该移的移动
- 当我运行的时候 ,果然出现了很多bug
- 最常出现的是空引用异常
- 双击定位到代码位置,打上断点,开始调试,然后查看这个语句的所有变量值,看哪个为null
- 或者在语句的上面Log输出每一个变量值,查看哪一个为空
- 结果是我定义了一个集合,错误的把初始化语句给删除了,所以为空
1-2 物品显示与隐藏异常
- 这个出现的空引用异常是最匪夷所思的,但是明白原理之后发现情有可原
- unity 是无法搜索被隐藏的对象的
- 父对象由于切换功能的需要,在一开始实例化出来后就要全部禁用,这样的话它的子对象在查找自身或者子对象就会报错空引用
- 代码如下:
GameObject tempCenter = GameObject.Instantiate<GameObject>(myView.Center, myView.CenterParent);CenterController tempS = tempCenter.GetComponent<CenterController>();//进行数据传输tempS.InitData(mapId, myView.CenterSlot, myModel.GetCenterItem(mapId), myModel.GetMapNum(mapId), myView.CenterItemDic);//加入字典当中centerDic.Add(mapId, tempS);tempCenter.SetActive(false); //禁用语句
- 这个异常并没有很复杂,关键是要知道有这么一个bug,并且怎么解决
- 我在解决的时候,就在想要把
SetActive(false)
放在哪里- 我认为禁用语句属于自身控制语句,应该放置在它自己的脚本里,就放置在了Awake语句中,结果明显不行
- 我又想,干脆在子对象的初始化语句后面加上启用语句,结果还是不行
2- 1KeyNotFound 异常
- 这个异常几乎耗了我一个上午
- 依然是重构完的事情,这个异常双击之后无法定位。所以我就很烦恼,到底是哪里出了问题
- 在控制台下面,有关于这个语句的详细分析,是在哪个脚本里面
- 我将在start里面执行的函数一一注释,最后确定问题是在哪个函数里面
- 然后将函数里面的语句根据功能进行注释,然后运行,最后将问题锁定到其中一个语句上面
- 最后发现,我将Model层的字典直接以属性的形式返回出来,在获取value的时候,没有进行key检查
- 原因是,我以前一直将字典封装,根据key返回value,用tryGetValue方法,可以返回null,如果key不存在。所以没有在意这个问题
3 异常
- 实时物品检测功能
- 这个异常是我代码都全部写好了,控制台也没有报错,但没有实现我的功能。
- 这种异常是最棘手的。
函数之间的关系
- 函数之间有这么几种关系
- A调用B
- A调用上层B
- A调用下层B
- 单例模式之间的调用
注意事项
- 在脚本内写新的功能代码的时候,每写完一个函数,需要对自身的输出进行Debug测试,是否输出自己想要的数据
- 如果以上那几种函数调用关系,调用函数的签名确定以后,先在函数里面进行Debug,传递的参数是否正常,符合预期,函数是否运行到这里,
- 每写一句代码都要思考,如果不这样的话会怎么样?
- 例如SendMessaagesUp,我在子对象的方法构建完毕后,进行了测试,因为这时候父对象的方法还没有构思,因此里面的sendMessageUp没有测试,在后面的时候发现传递过去的参数不符合预期
感言
- 良好的代码书写习惯很重要,可以避免浪费很多时间
- 学习过程中需要适时的总结归纳
- 以前在学校上课,这个过程被老师替代了,自学的话就需要自己来做
Unity Bug解决分析思路相关推荐
- Unity性能优化分析思路
1)Unity性能优化分析思路 2)Unity2020后Paticle子节点旋转并把ScalingMode设置为Hierarchy后,对根节点进行缩放时表现不正常 3)FBX默认会冗余lit.mat ...
- vue页面渲染(请求返回的后端)data,文本换行与显示bug 的分析与解决提示
vue页面渲染(请求返回的后端)data,文本换行与显示bug 的分析与解决提示 问题说明: vue项目,后台一经修改文案[介绍内容]后,前端接收显示实时数据,却无法换行? 原因分析: 后台页面的表单 ...
- 解决Feign接口调用有时候不好用的分析思路
很多架构师为了鉴权,会把controller带过来的header信息一股脑的利用feign的拦截器带入RequestTemplate,然后方便feign接口鉴权.这时候可能会带入其他的header信息 ...
- 常用 BUG 解决方法
扯淡 随着工作时间越来越长,对于代码的理解也越来越多!关注重点也渐渐地从代码本身转移到了代码结构性.解决问题方法性等方面.下面就来说一说,在遇到代码BUG,我们常用的一些方法! 二分定位法 通 ...
- 【BUG解决】sudo apt-get update 报错 E: The repository ‘http://xxx Release‘ does not have a Release file.
BUG描述 前两天在虚拟机Vmware中安装了Ubuntu18.04操作系统,因为需要安装其他工具.所以想着执行命令 sudo apt-get update 更新一下系统,以便进行安装.结果出现&qu ...
- 根因分析思路方法总结|保障IT系统及其稳定性
云智慧 AIOps 社区是由云智慧发起,针对运维业务场景,提供算法.算力.数据集整体的服务体系及智能运维业务场景的解决方案交流社区.该社区致力于传播 AIOps技术,旨在与各行业客户.用户.研究者和开 ...
- 软件测试的问题定位分析思路
定位分析思路 软件开发流程 一,前言 避免被开发忽悠,节省与开发扯皮 测试人反馈一个bug之后,开发(前端/后端)的回应? 能不能复现?有没有验证?再测一遍?脏数据?刷新一下?浏览器的问题?清一下缓存 ...
- vscode 格式化某一段代码_VSCode格式化代码功能失效的bug解决方法
VSCode格式化代码功能失效的bug解决方法 前不久我装上了 黑苹果,那么为了快速转移开发环境,我使用了VSCode(Visual Studio Code下面简称VSCode)的插件 Setting ...
- 西湖大学鞠峰组:环境宏病毒组学分析思路与常用工具
环境宏病毒组学分析思路与常用工具 袁凌1, 2,倪艳4,鞠峰1, 2, 3 * 1 浙江省海岸带环境与资源研究重点实验室,工学院, 西湖大学, 杭州, 浙江 2 前沿技术研究所, 浙江西湖高等研究院 ...
- spring学习笔记06-spring整合junit(出现的问题,解决的思路)
spring学习笔记06-spring整合junit(出现的问题,解决的思路) 文章目录 spring学习笔记06-spring整合junit(出现的问题,解决的思路) 3.1测试类中的问题和解决思路 ...
最新文章
- J - Fire! UVA - 11624
- 安卓bochs模拟linux_云电脑?不需要的,有了这个模拟器,手机轻松变电脑
- 5.16 12周第二课
- 【Linux】一步一步学Linux——groups命令(93)
- access设置0字段为null是因为类型转换失败_Apache Pulsar 2.6.1 版本正式发布:2.6.0 加强版,新增 OAuth2 支持
- linux删除mysql临时文件_linux下mysql自动备份数据库与自动删除临时文件_MySQL
- golang(2):beego 环境搭建
- 关于AD域账户和组的管理技巧
- JavaScript常用工具Date对象和Math介绍介绍
- linux查看was jvm内存溢出,was manage内存溢出
- 你真的需要一个微信公众号吗?
- 【Matlab】建立最优控制LQR控制器模型
- 京瓷2010打印机苹果电脑能用吗_MacOS(苹果电脑苹果系统)连接京瓷300i 打印机...
- 金融学习之八——ARCH和GARCH模型应用
- 什么是CDN及CDN加速原理
- L1、L2 正则项详解 - 解空间、先验分布、最大似然估计 and 最大后验估计
- Android开发:基站定位
- (CRON) info (No MTA installed, discarding output
- 天气预报API,你想要的它都有
- php做网站半成品,两小时学会用php做网站购物车
热门文章
- js 对象的_proto_属性 和函数的prototype属性分析
- JSON - Qt 对 JSON的处理
- 使用yum update更新文件系统时不更新内核的方法
- codeforces 712C C. Memory and De-Evolution(贪心)
- Windows XP Home Edition安裝 IIS 的方法
- QGroundControl源码编译安装
- H3C IS-IS实验
- 基于Cocos2d-x开发guardCarrot--4 《保卫萝卜2》主页面动画
- Linux命令:wget、unzip、cmake、make、vim
- LAMP架构调优(三)——模块的安装与调用