Skip to content

Commit 96a0a62

Browse files
authored
Use proguard symbolication in the Unity logger exception flow (#221)
1 parent 9b39c88 commit 96a0a62

File tree

3 files changed

+36
-2
lines changed

3 files changed

+36
-2
lines changed

Runtime/BacktraceClient.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1146,8 +1146,14 @@ internal void HandleUnityMessage(string message, string stackTrace, LogType type
11461146
Type = type
11471147
};
11481148
}
1149+
var report = new BacktraceReport(exception);
1150+
#if UNITY_ANDROID
1151+
if(exception.NativeStackTrace && _useProguard) {
1152+
report.UseSymbolication("proguard");
1153+
}
1154+
#endif
11491155

1150-
SendUnhandledExceptionReport(new BacktraceReport(exception), invokeSkipApi);
1156+
SendUnhandledExceptionReport(report, invokeSkipApi);
11511157
}
11521158

11531159
/// <summary>

Runtime/Model/BacktraceUnhandledException.cs

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,14 @@ public override string StackTrace
4848
/// </summary>
4949
public readonly List<BacktraceStackFrame> StackFrames;
5050

51+
/// <summary>
52+
/// Returns information if the stack trace is from the native environment (non-Unity)
53+
/// </summary>
54+
internal bool NativeStackTrace
55+
{
56+
get;
57+
private set;
58+
}
5159

5260
public BacktraceUnhandledException(string message, string stacktrace) : base(message)
5361
{
@@ -172,6 +180,8 @@ private BacktraceStackFrame ConvertFrame(string frameString, int methodNameEndIn
172180
FunctionName = frameString
173181
};
174182
}
183+
184+
NativeStackTrace = true;
175185
// add length of the '('
176186
methodStartIndex += 1;
177187
var methodArguments = frameString.Substring(methodStartIndex, methodNameEndIndex - methodStartIndex);
@@ -250,7 +260,8 @@ private BacktraceStackFrame SetJITStackTraceInformation(string frameString)
250260
{
251261
stackFrame.Library = stackFrame.FunctionName.Substring(0, libraryNameSeparator).Trim();
252262
stackFrame.FunctionName = stackFrame.FunctionName.Substring(++libraryNameSeparator).Trim();
253-
} else
263+
}
264+
else
254265
{
255266
stackFrame.Library = "native";
256267
}

Tests/Runtime/BacktraceStackTraceTests.cs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -345,6 +345,23 @@ public void TestStackTraceCreation_AndroidException_ValidStackTraceObject()
345345
}
346346
}
347347

348+
[Test]
349+
public void TestNativeStackTraceDetection_AndroidExceptionShouldSetFlag_NativeStackTraceIsSet()
350+
{
351+
var stackTrace = ConvertStackTraceToString(_anrStackTrace);
352+
var exception = new BacktraceUnhandledException(string.Empty, stackTrace);
353+
Assert.IsTrue(exception.NativeStackTrace);
354+
}
355+
356+
357+
[Test]
358+
public void TestNativeStackTraceDetection_UnityExceptionShouldNotSetFlag_NativeStackTraceIsNotSet()
359+
{
360+
var stackTrace = ConvertStackTraceToString(_simpleStack);
361+
var exception = new BacktraceUnhandledException(string.Empty, stackTrace);
362+
Assert.IsFalse(exception.NativeStackTrace);
363+
}
364+
348365

349366
[Test]
350367
public void TestStackTraceCreation_AndroidMixModeCallStack_ValidStackTraceObject()

0 commit comments

Comments
 (0)