Windows Phone App的dump 文件分析

时间:2023-12-20 13:09:14

前言

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

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

下载步骤

1. 登录http://dev.windows.com/en-us/dashboard

2. 选择Windows Phone Store

3. 进入Reports,选择Crash count,选择 App和日期,点积Refresh按钮

Windows Phone App的dump 文件分析

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

Windows Phone App的dump 文件分析

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

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

Windows Phone App的dump 文件分析

使用Windbg打开dump file

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

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

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

Windows Phone App的dump 文件分析

3. 设置symbol server,

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

Windows Phone App的dump 文件分析

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

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

c. 也可以使用”.symfix”

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

Windows Phone App的dump 文件分析

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

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

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

Windows Phone App的dump 文件分析

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

Windows Phone App的dump 文件分析

对比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来打开它。后面的文章我举一些实际中的例子来讲解如何找到错误的代码。

分享代码,改变世界!

Windows Phone Store App link:

http://www.windowsphone.com/zh-cn/store/app/博客园-uap/500f08f0-5be8-4723-aff9-a397beee52fc

Windows Store App link:

http://apps.microsoft.com/windows/zh-cn/app/c76b99a0-9abd-4a4e-86f0-b29bfcc51059

GitHub open source link:

https://github.com/MS-UAP/cnblogs-UAP

MSDN Sample Code:

https://code.msdn.microsoft.com/CNBlogs-Client-Universal-477943ab

MS-UAP

2015/1/12