Jaa


Windows Phone App的dump文件分析

我们在发布了自己的App以后,Windows Phone的Error Report机制会帮助我们收集程序的崩溃信息并发送到微软的服务器上,这可以辅助开发者提高App的稳定性。

那么如何利用这些dump file呢?首先我们需要下载这些dump file从微软开发者网站,然后借助调试工具进行分析,我们这里选用Windbg。

下载步骤:

  1. 登录https://dev.windows.com/en-us/dashboard
  2. 选择Windows Phone Store
  3. 进入Reports,选择Crash count,选择App和日期,点积Refresh按钮

         

        4. 点击导出stack traces,这里包括最近30天的崩溃转存记录

        

        5.  开发下载后的Excel文件,这个excel文件里面包含9列。分别是App的名字,App的ID,App的版本号,操作系统的版本号,出现问题的函数,异常类型,在30天内累计的崩溃次数,栈的回溯和Dump File下载地址。

        6.  我们可以通过第E和F列快速看一下,是否是由我们的App导致的崩溃,然后点击下载dump file进行分析。

          

 

使用Windbg打开dump file

  1. 下载windbg从微软的网站:

          https://msdn.microsoft.com/en-us/library/windows/hardware/ff551063(v=vs.85).aspx

        2.  运行windbg,从文件菜单中选择打开crash file,或者使用快捷键Ctrl+D.

          

         3. 设置symbol server,

                    a. 可以使用快捷键Ctrl + S:

         

                    b. 或者命令”.sympath” 命令:

                   .sympath srv*e:\bclCache*https://msdl.microsoft.com/download/symbols

         4. 也可以使用”.symfix”

         5. 指定完symbol server以后,我们需要重新加载symbol file,在命令窗口输入”.reload”。命令窗口可以使用快捷键Alt+1定位。

         6. 加载SOS模块。SOS.dll是Windbg为了调试managed代码编写的一个扩展命令模块。最新的windbg会自动加载这个模块。

         7. 查看是否SOS的版本加载正确。我们首先查看coreclr.dll的版本号,然后对比当前加载的SOS.dll的版本号是否一致。

    1. 在命令窗口输入”lmv mcoreclr”。命令lmv是打印出模块的信息,m+模块名字用来指定需要打印的模块,这里是打印coreclr模块的信息。

         

 

                    b.  在命令窗口输入”.chain”。这个命令是显示出默认的加载顺序为所有加载的debug扩展模块。

        

 对比coreclr模块的版本号和查找链中的第一个是否匹配。如果不匹配,我们可以使用”.unload”卸掉已经加载的SOS模块,再次使用”.load + 路径”选择扩展Dll查找链中的正确项。例如:

.unload e:\bclcache\symbols\sos_x86_ARM_4.0.50829.00.dll\503D5669449000

.load c:\Debuggers\SOS

.chain再次查看第一个是否匹配

 

小结

现在我们已经知道如何下载dump file并如何使用windbg来打开它。后面的文章我举一些实际中的例子来讲解如何找到错误的代码。