文章目录

  • 前言
  • 异常分类
    • 下面的异常我将按照不同种类给予不同的标志数字
    • 1-空引用异常
    • 1-2 物品显示与隐藏异常
    • 2- 1KeyNotFound 异常
    • 3 异常
      • 函数之间的关系
    • 注意事项
    • 感言

前言

一般来说,新手遇到bug会很苦恼,而且打击自己的学习积极性。我在看完一套学习视频后,自己关掉,然后看自己能不能完完全全的再写出来,并且尽力让他趋于完美。其实这样的话,我相当于把代码写了两遍,看视频的时候跟着敲了一遍,自己又写了一遍。虽然苦,但是乐在其中

异常分类

  • 我将异常分为四种
  1. 在控制台上双击可以定位的异常

    • 这种异常也许是由于上下文引起的
    • 也有可能属于蝴蝶效应,间接引发的
  2. 无法定位的异常
    • 用二分法进行注释,然后排查是哪句话出现的错误,结合错误类型进行定位
  3. 没有任何报错,但就是实现不了想要的功能
    • 首先将功能所涉及的函数全部Log,查看是否全部执行
    • 将函数中所涉及的关键变量Log出来,查看其变化
    • 根据变量所显现出来的问题,进一步锁定出现问题的代码
    • 然后将代码打上断点,运行此处,查看变量的情况。做到这一步基本就可以解决问题了
  4. 逻辑错误
    • 这种错误最低级也最致命,没有解决办法,只能多思考

下面的异常我将按照不同种类给予不同的标志数字

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解决分析思路相关推荐

  1. Unity性能优化分析思路

    1)Unity性能优化分析思路 ​2)Unity2020后Paticle子节点旋转并把ScalingMode设置为Hierarchy后,对根节点进行缩放时表现不正常 3)FBX默认会冗余lit.mat ...

  2. vue页面渲染(请求返回的后端)data,文本换行与显示bug 的分析与解决提示

    vue页面渲染(请求返回的后端)data,文本换行与显示bug 的分析与解决提示 问题说明: vue项目,后台一经修改文案[介绍内容]后,前端接收显示实时数据,却无法换行? 原因分析: 后台页面的表单 ...

  3. 解决Feign接口调用有时候不好用的分析思路

    很多架构师为了鉴权,会把controller带过来的header信息一股脑的利用feign的拦截器带入RequestTemplate,然后方便feign接口鉴权.这时候可能会带入其他的header信息 ...

  4. 常用 BUG 解决方法

    扯淡   随着工作时间越来越长,对于代码的理解也越来越多!关注重点也渐渐地从代码本身转移到了代码结构性.解决问题方法性等方面.下面就来说一说,在遇到代码BUG,我们常用的一些方法! 二分定位法   通 ...

  5. 【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 ...

  6. 根因分析思路方法总结|保障IT系统及其稳定性

    云智慧 AIOps 社区是由云智慧发起,针对运维业务场景,提供算法.算力.数据集整体的服务体系及智能运维业务场景的解决方案交流社区.该社区致力于传播 AIOps技术,旨在与各行业客户.用户.研究者和开 ...

  7. 软件测试的问题定位分析思路

    定位分析思路 软件开发流程 一,前言 避免被开发忽悠,节省与开发扯皮 测试人反馈一个bug之后,开发(前端/后端)的回应? 能不能复现?有没有验证?再测一遍?脏数据?刷新一下?浏览器的问题?清一下缓存 ...

  8. vscode 格式化某一段代码_VSCode格式化代码功能失效的bug解决方法

    VSCode格式化代码功能失效的bug解决方法 前不久我装上了 黑苹果,那么为了快速转移开发环境,我使用了VSCode(Visual Studio Code下面简称VSCode)的插件 Setting ...

  9. 西湖大学鞠峰组:环境宏病毒组学分析思路与常用工具

    环境宏病毒组学分析思路与常用工具 袁凌1, 2,倪艳4,鞠峰1, 2, 3 * 1 浙江省海岸带环境与资源研究重点实验室,工学院, 西湖大学, 杭州, 浙江 2  前沿技术研究所, 浙江西湖高等研究院 ...

  10. spring学习笔记06-spring整合junit(出现的问题,解决的思路)

    spring学习笔记06-spring整合junit(出现的问题,解决的思路) 文章目录 spring学习笔记06-spring整合junit(出现的问题,解决的思路) 3.1测试类中的问题和解决思路 ...

最新文章

  1. J - Fire! UVA - 11624
  2. 安卓bochs模拟linux_云电脑?不需要的,有了这个模拟器,手机轻松变电脑
  3. 5.16 12周第二课
  4. 【Linux】一步一步学Linux——groups命令(93)
  5. access设置0字段为null是因为类型转换失败_Apache Pulsar 2.6.1 版本正式发布:2.6.0 加强版,新增 OAuth2 支持
  6. linux删除mysql临时文件_linux下mysql自动备份数据库与自动删除临时文件_MySQL
  7. golang(2):beego 环境搭建
  8. 关于AD域账户和组的管理技巧
  9. JavaScript常用工具Date对象和Math介绍介绍
  10. linux查看was jvm内存溢出,was manage内存溢出
  11. 你真的需要一个微信公众号吗?
  12. 【Matlab】建立最优控制LQR控制器模型
  13. 京瓷2010打印机苹果电脑能用吗_MacOS(苹果电脑苹果系统)连接京瓷300i 打印机...
  14. 金融学习之八——ARCH和GARCH模型应用
  15. 什么是CDN及CDN加速原理
  16. L1、L2 正则项详解 - 解空间、先验分布、最大似然估计 and 最大后验估计
  17. Android开发:基站定位
  18. (CRON) info (No MTA installed, discarding output
  19. 天气预报API,你想要的它都有
  20. php做网站半成品,两小时学会用php做网站购物车

热门文章

  1. js 对象的_proto_属性 和函数的prototype属性分析
  2. JSON - Qt 对 JSON的处理
  3. 使用yum update更新文件系统时不更新内核的方法
  4. codeforces 712C C. Memory and De-Evolution(贪心)
  5. Windows XP Home Edition安裝 IIS 的方法
  6. QGroundControl源码编译安装
  7. H3C IS-IS实验
  8. 基于Cocos2d-x开发guardCarrot--4 《保卫萝卜2》主页面动画
  9. Linux命令:wget、unzip、cmake、make、vim
  10. LAMP架构调优(三)——模块的安装与调用