Unity3D C# 日志拦截异常拦截

在这里插入图片描述

此时我们美美的用Unity打了一个安卓包,打开玩了一会以后游戏突然崩溃了,然后我再也不能复现这个问题了!!!怎么办?留着这个坑给玩家吗?不可能的…

所以就有了日志记录器,在崩溃之前拦截异常和日志写入文件内,我们就能找到错误的蛛丝马迹了。

1.C#异常拦截

有着这样的一个委托,所有未被捕获的异常都会被传入这个委托,这个委托就是异常的最后防线。
我们只需要这样就可以拦截未捕获的异常,把异常信息和堆栈信息写入文件,或者按照我们自己的方式处理

AppDomain.CurrentDomain.UnhandledException+=CurrentDomain_UnhandledException;

private void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)

我们只需要在CurrentDomain_UnhandledException中写入一些异常信息,即可保存

2.Unity日志拦截

原理相同,还是一个拦截委托,我们可以把日志类型和日志信息写入文件。
另外UnityEngine.Debug.LogException和throw Exception的区别其实不大,throw和LogEx都会暂停编辑器,但是LogEx是带有Unity相关的堆栈的。

Application.logMessageReceived += Record

void Record(string logString, string stackTrace, LogType type)

3. C# 堆栈跟踪

string traceInfo = new StackTrace((Exception)(e.ExceptionObject)).ToString();

也就是说这个东西StackTrace的构造函数里,参数是一个Exception,能获取到这个异常的堆栈信息,ToString之后就是我们需要的字符串。

4.写入文件

可以考虑写入Application.persistentDataPath中,这个文件夹在各种平台可读写,但是Unity提供了一种打包方式”DevelopmentBuild“可以展示控制台,不过这种方式没法防范程序突然崩溃,而一般崩溃由异常导致。

using System.IO;


StreamWriter writer = new StreamWriter(Application.persistentDataPath);
writer.Write(日志);
writer.Close();
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YUE ZHEN PENG

码字不易,如果你想请我喝杯果汁

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值