博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
捕获程序未抛出的异常
阅读量:5035 次
发布时间:2019-06-12

本文共 2240 字,大约阅读时间需要 7 分钟。

 

  这段时间,Unity项目遇到问题,工程中有很多有问题的代码,调试的时候,这些代码理应抛出异常但是却没有,这是一个很恐怖的事情,因为你根本不知道你代码中有哪些不对,程序运行下来,就会遇到各种逻辑问题,查无对策。后来我研究了下,记录了下来

  在unity中,子线程下的异常,如果不加try catch,可能不会被unity正常捕获,故而你会不知道这里有异常 

  先举个栗子

Thread t1,t2;    List
list = null; void Start () { try { t1 = new Thread(new ThreadStart(MyTest)); t1.Start(); } catch { } } void MyTest() { //输出异常 1 list.Add(1); try { list.Add(1); } catch(Exception e) { //输出异常 2 Debug.Log(e.ToString()); } }

  这段代码对一个null的引用尝试读写,将会引发空引用异常。在我们调用start方法后,控制台理应在执行“输出异常1”和“输出异常2”的时候打印异常信息,但是事实上,unity控制台中什么信息都没打印。如果你把程序发布,后果是可想而知的。

  然后我尝试在"输出异常1"处加了断点

 

  程序执行到这里,调试程序直接“崩了”,所以这行的异常信息没有输出到控制台,程序也没有往下执行,下面的异常信息自然也不会输出到控制台。

  所以我猜测肯定是40行代码导致t1子线程出了问题,所以unity不能正常捕获这里的异常或者输出这里的异常信息.

 

  那么有没有什么办法让unity向我们报告这个异常信息呢?

  

Thread t1;    List
list = null; void Start () {
AppDomain app = AppDomain.CurrentDomain; app.UnhandledException += App1_UnhandledException; try { t1 = new Thread(new ThreadStart(MyTest)); t1.Start(); } catch { } } private void App1_UnhandledException(object sender, UnhandledExceptionEventArgs e) { Debug.Log(e.ExceptionObject.ToString()); } void MyTest() { //输出异常 1 list.Add(1); try { list.Add(1); } catch(Exception e) { //输出异常 2 Debug.Log(e.ToString()); } }

  

  红色部分是我新添加的代码,测试运行,得到输出

System.NullReferenceException: Object reference not set to an instance of an object  at Test.MyTest () [0x00008] in E:\Demo\New Unity Project 3\Assets\Test.cs:40 UnityEngine.Debug:Log(Object)Test:App1_UnhandledException(Object, UnhandledExceptionEventArgs) (at Assets/Test.cs:33)

  我成功的打印出了异常,并获得了异常位置(Test.cs:33)。

  AppDomain 描述一个运用程序域,当程序某个异常没有被捕获的时候,UnhandledException事件就会调用。下面是这个API详细介绍.

  https://msdn.microsoft.com/zh-cn/library/system.appdomain.unhandledexception(v=vs.110).aspx

 

转载于:https://www.cnblogs.com/ferryqiu/p/8137062.html

你可能感兴趣的文章
加密学教程(Cryptography Tuturials)文件夹
查看>>
90后大学生卖煎饼月收入4k
查看>>
MongoDB的查询索引
查看>>
u-boot简单学习笔记(二)——AR9331 uboot.lds分析
查看>>
文件操作:根据现有类生成所需要的类
查看>>
pdf中内嵌字体问题
查看>>
Debian搭建WordPress
查看>>
Xstream 解析xml文件内容
查看>>
JavaScript正则表达式方法总结
查看>>
pub/sub的实际应用总结
查看>>
多媒体标签
查看>>
TCP的应用编程服务器端重要笔记
查看>>
【题解】 Codeforces 919F A Game With Numbers(拓扑排序+博弈论+哈希)
查看>>
分布式技术追踪 2018年第二十一期
查看>>
random模块
查看>>
HTML5基础知识笔记(更新)
查看>>
windows 无法启动SQL Server FullText Search(MSSQLSERVER)服务
查看>>
js 获取get参数值(url参数)
查看>>
C++ STL内存池
查看>>
9.Hibernate 缓存
查看>>