捕获程序未抛出的异常
2018-06-18 04:04:37来源:未知 阅读 ()
这段时间,Unity项目遇到问题,工程中有很多有问题的代码,调试的时候,这些代码理应抛出异常但是却没有,这是一个很恐怖的事情,因为你根本不知道你代码中有哪些不对,程序运行下来,就会遇到各种逻辑问题,查无对策。后来我研究了下,记录了下来
在unity中,子线程下的异常,如果不加try catch,可能不会被unity正常捕获,故而你会不知道这里有异常
先举个栗子
Thread t1,t2; List<int> 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<int> 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
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:2.C#知识点:I/O
下一篇:可空值类型
- 国外程序员整理的Java资源大全(全部是干货) 2020-06-12
- 通过与C++程序对比,彻底搞清楚JAVA的对象拷贝 2020-06-11
- 5月到6月程序员到底经历了和什么,工资狂跌***元,你是否也 2020-06-10
- 国外程序员整理的Java资源大全(全部是干货) 2020-06-09
- 一个程序员的水平能差到什么程度?看到他我明白了! 2020-06-05
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash