我有一个Xamarin.android应用程序,该应用程序报告崩溃到Raygun。从发行版中报告给Raygun的堆栈痕迹不包括行号。如果我给出发行版构建配置与.csproj文件中的调试配置相同的设置:
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugSymbols>True</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
...
</PropertyGroup>
然后,我仍然看不到发送到Raygun的堆栈跟踪中的行号。但是,如果我使用附加的Visual Studio调试器运行该应用程序,则发送给Raygun的堆栈跟踪确实包括行号。请注意,在任何情况下,所有堆栈跟踪都包含类和方法名称。这个问题仅与行号有关。
当抛出异常时附加调试器时,为什么仅在附加调试器时才包含堆栈痕迹?更重要的是,如何在发行版的报告的堆栈跟踪中获取行号,而没有附加调试器?
您需要使用Release Build的符号通过mono-symbolicate
象征"本机" Android崩溃报告相同的构建(。
一些崩溃的报告服务直接支持Xamarin,允许您上传构建的MSYM文件并自动运行mono-symbolicate
,而其他人则不需要手动进行操作(或某些支持Web-Hooks,并且您可以自己运行以运行它在每个收到的崩溃报告中,我在织物上这样做(
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
- https://developer.xamarin.com/releases/android/xamarin.android_7/xamarin.android_7.4/(搜索
mono-symbolicate
的发行文本(
接下来,抓住一个未手动异常的崩溃日志
adb logcat -d > errors.txt
最后,使用单符号将错误转换为包含文件和行号:
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)
单摩托克将上述转化为:
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)