Unity使用Application.logMessageReceived能否捕获崩溃日志及StackOverflowException
问题答复
1. 崩溃场景下onLogMessageReceived是否会触发?
分两种场景判断:
- 若崩溃由托管层可捕获异常触发(如普通空引用、数组越界异常),且异常抛出后进程未被立刻终止,该事件会正常触发
- 若为以下崩溃场景,事件不会触发:
- 引擎原生C++层报错(如内存访问越界、渲染管线故障、Native插件抛出未处理异常)
- 进程被系统直接回收(如内存不足OOM、应用无响应用户/系统强制杀进程)
2. 该方案能否保存崩溃场景下的日志?
仅能覆盖托管层可捕获异常对应的崩溃场景,无法覆盖原生层崩溃、进程被强杀的场景。另外需要注意:如果writeReportInFile方法的IO操作存在耗时、或执行写文件逻辑时触发了新的异常,也可能出现日志未写完进程就退出的情况。如果需要更完整的崩溃日志采集,建议搭配Unity自带的崩溃日志收集能力,或额外实现Native层的崩溃捕获逻辑。
3. 能否捕获StackOverflowException?
不能。StackOverflowException属于.NET运行时层面的不可恢复严重异常,一旦抛出运行时会直接终止进程,不会走常规的异常分发流程,也不会触发Application.logMessageReceived事件,该监听方案无法捕获这类异常。
内容的提问来源于stack exchange,提问作者Aditya kumar
相关产品推荐
相关产品推荐

