我们每天都在使用Xamarin和Xamarin表单,并且经常遇到异常,而没有任何关于如何调试的有用信息。
有时它是我们的结果,有时是Xamarin中的错误,特别是Xamarin Forms。
最常见的例外是NullReferenceException
我们很难排除故障。
如果我们可以访问Xamarin Forms符号,那么通过单步执行代码和Xamarin代码来查明问题会容易得多。
有没有办法获得Xamarin符号包,即带有nuget的pdb文件?
(直接从源代码进行编译会在使用第三方软件包时产生问题。)
答案 0 :(得分:3)
如果您检查 Xamarin.Forms 包,它包含mdb
和pdb
文件,从技术上讲,您可以通过Xamarin.Forms代码进行调试。
如果你想通过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