我有一个Xamarin.Android应用程序报告崩溃到Raygun。从版本构建报告给Raygun的堆栈跟踪不包括行号。如果我为Release构建配置提供与.csproj文件中的Debug配置相同的设置:
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugSymbols>True</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
...
</PropertyGroup>
然后我仍然没有看到发送给Raygun的堆栈跟踪中的行号。但是,如果我在附加Visual Studio调试器的情况下运行应用程序,则发送到Raygun的堆栈跟踪会包含行号。请注意,在任何情况下,所有堆栈跟踪都包括类和方法名称。这个问题只涉及行号。
如果在抛出异常时附加了调试器,为什么堆栈跟踪只包含行号?更重要的是,如何在没有附加调试器的情况下获取Release版本报告的堆栈跟踪中的行号?
答案 0 :(得分:4)
你需要象征着&#34; native&#34;通过mono-symbolicate
使用发布版本符号的Android崩溃报告(版本的msym和构建应用必须来自同一版本)。
某些崩溃报告服务直接支持Xamarin并允许您上传构建的msym文件并自动运行mono-symbolicate
,其他则不会因此需要您手动执行(或某些支持Web挂钩)并且你可以自己实现它来运行每个收到的崩溃报告,我在Fabric上这样做)
mono-symbolicate
Usage: symbolicate [options] <msym dir> <input file>
symbolicate [options] store-symbols <msym dir> [<dir>]+
Available options:
-h, --help Show this help
-q Quiet, warnings are not displayed
-v Verbose, log debug messages
mono-symbolicate
)的发布文本接下来,获取一个未处理异常的崩溃日志
adb logcat -d > errors.txt
最后,使用mono-symbolicate转换错误以包含文件和行号:
mono-symbolicate path-to-dll-in-.mSYM-directory path-to-errors.txt
例如,给定带有内容的errors.txt:
I/MonoDroid( 1545): System.Exception: wow it broke
I/MonoDroid( 1545): at CrashApp.MainActivity+<OnCreate>c__AnonStorey0.<>m__0 (System.Object , System.EventArgs ) [0x00030] in <filename unknown>:0
I/MonoDroid( 1545): at Android.Views.View+IOnClickListenerImplementor.OnClick (Android.Views.View v) [0x00014] in <filename unknown>:0
I/MonoDroid( 1545): at Android.Views.View+IOnClickListenerInvoker.n_OnClick_Landroid_view_View_ (IntPtr jnienv, IntPtr native__this, IntPtr native_v) [0x00011] in <filename unknown>:0
I/MonoDroid( 1545): at (wrapper dynamic-method) System.Object:5616285d-461b-4005-a31b-d4637a8cdddc (intptr,intptr,intptr)
mono-symbolicate会将上述内容翻译成:
I/MonoDroid( 1545): System.Exception: wow it broke
I/MonoDroid( 1545): at CrashApp.MainActivity+<OnCreate>c__AnonStorey0.<>m__0 (System.Object , System.EventArgs ) [0x00030] in /Users/dean/Projects/CrashApp/CrashApp/MainActivity.cs:30
I/MonoDroid( 1545): at Android.Views.View+IOnClickListenerImplementor.OnClick (Android.Views.View v) [0x00014] in /Users/dean/Documents/Sandbox/Xamarin/dellismonodroid/src/Mono.Android/platforms/android-19/src/generated/Android.Webkit.WebBackForwardList.cs:68
I/MonoDroid( 1545): at Android.Views.View+IOnClickListenerInvoker.n_OnClick_Landroid_view_View_ (IntPtr jnienv, IntPtr native__this, IntPtr native_v) [0x00011] in /Users/dean/Documents/Sandbox/Xamarin/dellismonodroid/src/Mono.Android/platforms/android-19/src/generated/Android.Webkit.WebBackForwardList.cs:23
I/MonoDroid( 1545): at (wrapper dynamic-method) System.Object:5616285d-461b-4005-a31b-d4637a8cdddc (intptr,intptr,intptr)