UnityのClash and Exception Reportingを使ってみる
環境
- Windows11
- Unity2021.3.20f1
参考URL

(今気づいたけど、プロジェクト名がclashになってる・・・👀)

CloudDiagnostics をクリック

Create Project ID をクリック
Project Settings の Services から、Will this app be primarily targeted to children under age 13? に回答する

Project Settings の Cloud Diagnostics から、Clashes and exceptions をONにする


Unity2021の場合は Dashboard はここから簡単に飛べるみたい

とりすーぷ先生のコードをそのままお借りして・・・
using System;
using UnityEngine;
using UnityEngine.UI;
public class ClashReportSample : MonoBehaviour
{
[SerializeField] private Button _errorButton;
private void Start()
{
Debug.Log("Logです");
Debug.LogWarning("LogWarningです");
Debug.LogError("LogErrorです");
_errorButton.onClick.AddListener(() =>
{
Debug.Log("onClickを検知");
throw new SampleException("クラッシュ!");
});
}
private class SampleException : Exception
{
public SampleException(string message) : base(message)
{
Debug.LogError("SampleExceptionを検知");
}
}
}
Editor実行でボタンぽちると・・・でた!

メタ情報とスタックトレースもちゃんと取れてた(スクショ割愛)
無料版なのでカスタムメタは後回し
クラッシュボタン追加
using System;
using UnityEngine;
using UnityEngine.Diagnostics;
using UnityEngine.UI;
public class ClashReportSample : MonoBehaviour
{
[SerializeField] private Button _errorButton;
[SerializeField] private Button _crashButton;
private void Start()
{
Debug.Log("Logです");
Debug.LogWarning("LogWarningです");
Debug.LogError("LogErrorです");
_errorButton.onClick.AddListener(() =>
{
Debug.Log("_errorButton.onClickを検知");
throw new SampleException("クラッシュ!");
});
_crashButton.onClick.AddListener(() =>
{
Debug.Log("_crashButton.onClickを検知");
UnityEngine.Diagnostics.Utils.ForceCrash(ForcedCrashCategory.AccessViolation);
});
}
private class SampleException : Exception
{
public SampleException(string message) : base(message)
{
Debug.LogError("SampleExceptionを検知");
}
}
}
Windowsビルドして強制クラッシュしてみると・・・でた!

PDBも試す

Debugging Symbols からビルドして出力されたPDBファイルをアップロードする

差分が分からず・・・
コードをとりすーぷ先生のサンプル通りにする。
using System;
using System.Threading.Tasks;
using UnityEngine;
using UnityEngine.Diagnostics;
using UnityEngine.UI;
public class ClashReportSample : MonoBehaviour
{
[SerializeField] private Button _errorButton;
[SerializeField] private Button _crashButton;
private void Start()
{
Debug.Log("Logです");
Debug.LogWarning("LogWarningです");
Debug.LogError("LogErrorです");
_errorButton.onClick.AddListener(() =>
{
Debug.Log("_errorButton.onClickを検知");
throw new SampleException("クラッシュ!");
});
_crashButton.onClick.AddListener(() =>
{
Debug.Log("_crashButton.onClickを検知");
CrashMethod();
});
_ = LoopAsync();
}
private async Task LoopAsync()
{
for (var i = 0; i < 5; i++)
{
await Task.Delay(TimeSpan.FromSeconds(1));
}
Debug.Log("LoopAsyncでクラッシュを検知");
CrashMethod();
}
private void CrashMethod()
{
UnityEngine.Diagnostics.Utils.ForceCrash(ForcedCrashCategory.AccessViolation);
}
private class SampleException : Exception
{
public SampleException(string message) : base(message)
{
Debug.LogError("SampleExceptionを検知");
}
}
}
Mono でビルドしてたから表示されてないだけだった
もろもろ確認できたのでAndroidで試す
シンボルファイルについては公式に記載のある通り、Androidは .so ファイルになるらしい。
Symbol files come in different formats depending on the operating system. Apple platforms use dSYM folders, Android symbols are stored in .so files, and Windows symbols are stored in .pdb files. The crash and exception reporting service can identify and process all of these formats.
symbols.zip でいいっぽい?
.soがまとまってた

アップしてみる

symbol missing になる
Debugging設定でも駄目だった
クラッシュレポート自体はとれるようになったので、一旦切り上げてiOSも見てみる
iOSのシンボルファイル等については下記にて記載あり
XCodeのアプデ等で四苦八苦してやっとビルド・・・
設定はここみたいだが、ビルド後に該当ファイルがなかった。調べてみるとApp Store ConnectからDLしないと駄目だったりするっぽい?

ほとんど見れない・・・。なんとかしなければ・・・。

iOSのdSYMがダウンロードできない。
参考に下記見てみる
