Skip to content

Commit 8db1008

Browse files
authored
Proguard support (#216)
* Allow unity to finish capturing uncaught exception * Allow to use Proguard symbolication * Formatting * Documentation * Formatting
1 parent a8874ae commit 8db1008

File tree

3 files changed

+54
-8
lines changed

3 files changed

+54
-8
lines changed

Runtime/BacktraceClient.cs

Lines changed: 30 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,19 @@ internal AttributeProvider AttributeProvider
6666
}
6767
}
6868

69+
#if UNITY_ANDROID
70+
private bool _useProguard = false;
71+
72+
/// <summary>
73+
/// Allow to enable Proguard support for captured Exceptions.
74+
/// </summary>
75+
/// <param name="symbolicationId">Proguard map symbolication id</param>
76+
public void UseProguard(String symbolicationId) {
77+
_useProguard = true;
78+
AttributeProvider["symbolication_id"] = symbolicationId;
79+
}
80+
#endif
81+
6982
#if !UNITY_WEBGL
7083
private BacktraceMetrics _metrics;
7184

@@ -971,7 +984,11 @@ internal void OnAnrDetected(string stackTrace)
971984
{
972985
Breadcrumbs.FromMonoBehavior(anrMessage, LogType.Warning, new Dictionary<string, string> { { "stackTrace", stackTrace } });
973986
}
974-
SendUnhandledException(hang);
987+
var report = new BacktraceReport(hang);
988+
if (_useProguard) {
989+
report.UseSymbolication("proguard");
990+
}
991+
SendUnhandledExceptionReport(report);
975992
}
976993

977994
/// <summary>
@@ -988,15 +1005,20 @@ internal void HandleUnhandledExceptionsFromAndroidBackgroundThread(string backgr
9881005
}
9891006
var message = backgroundExceptionMessage.Substring(0, splitIndex);
9901007
var stackTrace = backgroundExceptionMessage.Substring(splitIndex);
1008+
var report = new BacktraceReport(new BacktraceUnhandledException(message, stackTrace));
1009+
if (_useProguard) {
1010+
report.UseSymbolication("proguard");
1011+
}
1012+
9911013
if (Database != null)
9921014
{
993-
var backtraceData = new BacktraceReport(new BacktraceUnhandledException(message, stackTrace)).ToBacktraceData(null, GameObjectDepth);
1015+
var backtraceData = report.ToBacktraceData(null, GameObjectDepth);
9941016
AttributeProvider.AddAttributes(backtraceData.Attributes.Attributes);
9951017
Database.Add(backtraceData);
9961018
}
9971019
else
9981020
{
999-
HandleUnityMessage(message, stackTrace, LogType.Exception);
1021+
SendUnhandledExceptionReport(report);
10001022
}
10011023
var androidNativeClient = _nativeClient as Runtime.Native.Android.NativeClient;
10021024
if (androidNativeClient != null)
@@ -1125,7 +1147,7 @@ internal void HandleUnityMessage(string message, string stackTrace, LogType type
11251147
};
11261148
}
11271149

1128-
SendUnhandledException(exception, invokeSkipApi);
1150+
SendUnhandledExceptionReport(new BacktraceReport(exception), invokeSkipApi);
11291151
}
11301152

11311153
/// <summary>
@@ -1142,15 +1164,15 @@ private bool SamplingShouldSkip()
11421164
return value > Configuration.Sampling;
11431165
}
11441166

1145-
private void SendUnhandledException(BacktraceUnhandledException exception, bool invokeSkipApi = true)
1167+
private void SendUnhandledExceptionReport(BacktraceReport report, bool invokeSkipApi = true)
11461168
{
11471169
if (OnUnhandledApplicationException != null)
11481170
{
1149-
OnUnhandledApplicationException.Invoke(exception);
1171+
OnUnhandledApplicationException.Invoke(report.Exception);
11501172
}
1151-
if (ShouldSendReport(exception, null, null, invokeSkipApi))
1173+
if (ShouldSendReport(report.Exception, null, null, invokeSkipApi))
11521174
{
1153-
SendReport(new BacktraceReport(exception));
1175+
SendReport(report);
11541176
}
11551177
}
11561178

Runtime/Model/BacktraceData.cs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,11 @@ internal string UuidString
8282
/// </summary>
8383
public string[] Classifier;
8484

85+
/// <summary>
86+
/// Symbolication method
87+
/// </summary>
88+
public String Symbolication;
89+
8590
/// <summary>
8691
/// Source code information.
8792
/// </summary>
@@ -125,6 +130,7 @@ public BacktraceData(BacktraceReport report, Dictionary<string, string> clientAt
125130
Uuid = Report.Uuid;
126131
Timestamp = Report.Timestamp;
127132
Classifier = Report.ExceptionTypeReport ? new[] { Report.Classifier } : new string[0];
133+
Symbolication = report.Symbolication;
128134

129135
SetAttributes(clientAttributes, gameObjectDepth);
130136
SetThreadInformations();
@@ -152,6 +158,11 @@ public string ToJson()
152158
jObject.Add("attributes", Attributes.ToJson());
153159
jObject.Add("annotations", Annotation.ToJson());
154160
jObject.Add("threads", ThreadData.ToJson());
161+
162+
if (!String.IsNullOrEmpty(Symbolication)) {
163+
jObject.Add("symbolication", Symbolication);
164+
}
165+
155166
if (SourceCode != null)
156167
{
157168
jObject.Add("sourceCode", SourceCode.ToJson());

Runtime/Model/BacktraceReport.cs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,11 @@ public class BacktraceReport
7171
/// </summary>
7272
public List<BacktraceStackFrame> DiagnosticStack { get; set; }
7373

74+
/// <summary>
75+
/// Current report symbolication method
76+
/// </summary>
77+
public String Symbolication { get; set; }
78+
7479
/// <summary>
7580
/// Source code
7681
/// </summary>
@@ -119,6 +124,14 @@ public BacktraceReport(
119124
SetDefaultAttributes();
120125
}
121126

127+
128+
/// <summary>
129+
/// Sets report symbolication type
130+
/// </summary>
131+
public void UseSymbolication(String symbolication) {
132+
Symbolication = symbolication;
133+
}
134+
122135
private void SetDefaultAttributes()
123136
{
124137
Attributes["error.message"] = Message;

0 commit comments

Comments
 (0)