Xamarin和Xamarin Forms的符号包(PDB文件)

时间:2018-02-16 13:06:56

标签: xamarin xamarin.forms

我们每天都在使用Xamarin和Xamarin表单,并且经常遇到异常,而没有任何关于如何调试的有用信息。

有时它是我们的结果,有时是Xamarin中的错误,特别是Xamarin Forms。

最常见的例外是NullReferenceException我们很难排除故障。

如果我们可以访问Xamarin Forms符号,那么通过单步执行代码和Xamarin代码来查明问题会容易得多。

有没有办法获得Xamarin符号包,即带有nuget的pdb文件?

(直接从源代码进行编译会在使用第三方软件包时产生问题。)

1 个答案:

答案 0 :(得分:3)

如果您检查 Xamarin.Forms 包,它包含mdbpdb文件,从技术上讲,您可以通过Xamarin.Forms代码进行调试。

enter image description here

  

如果你想通过Xamarin.Forms代码,你可以检查这个" hack"其中包括自动修改编译目标的pdb文件。

     

https://forums.xamarin.com/discussion/73572/debug-stepping-into-own-nuget-package

如果您发现错误且堆栈仅显示本机代码

您可以使用mono命令行。

您可以使用函数mono_print_method_from_ip(取一个地址)来获取给定地址的方法的名称。这在检查堆栈跟踪时特别有用。该函数在Mono 1.1.x系列中重命名为mono_pmip(有一段时间该函数被称为mono_print_method_from_ip)。

例如,当遇到堆栈跟踪时,如下所示:

(gdb) where
#0  ves_icall_System_String_GetHashCode (me=0x80795d0) at string-icalls.c:861
#1  0x0817f490 in ?? ()
#2  0x0817f42a in ?? ()
#3  0x0817f266 in ?? ()
#4  0x0817f1a5 in ?? ()

您可以使用mono_print_method_from_ip函数找出每个地址的方法(如果您使用的是Mono 1.1.x,则可以找到mono_pmip):

(gdb) p mono_pmip (0x0817f490)
IP 0x817f490 at offset 0x28 of method (wrapper managed-to-native) System.String:GetHashCode () (0x817f468 0x817f4a4)
$1 = void
(gdb) p mono_pmip (0x0817f42a)
IP 0x817f42a at offset 0x52 of method System.Collections.Hashtable:GetHash (object) (0x817f3d8 0x817f43b)
$2 = void
  

参考http://www.mono-project.com/docs/debug+profile/debug/