为什么仅在附加调试器时才会仅包括线号



我有一个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)

最新更新