• Windows Phone App的dump 文件分析


    前言

    我们在发布了自己的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按钮

    clip_image002

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

    clip_image004

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

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

    clip_image006

    使用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.

    clip_image008

    3. 设置symbol server,

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

    clip_image009

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

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

    c. 也可以使用”.symfix”

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

    clip_image011

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

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

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

    clip_image013

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

    clip_image015

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

    .unload e:clcachesymbolssos_x86_ARM_4.0.50829.00.dll503D5669449000

    .load c:DebuggersSOS

    .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

  • 相关阅读:
    request的getServletPath(),getContextPath(),getRequestURI(),getRealPath("/")区别
    Google Guava
    Mybatis分页插件-PageHelper
    Mybatis通用Mapper
    IntelliJ Idea 常用快捷键
    @JProfiler
    sparkStreaming消费kafka-0.8方式:direct方式(存储offset到zookeeper)
    kafka其中一台节点坏掉的迁移或者数据迁移
    sparkStreaming序列化问题
    【CSS】最全的CSS浏览器兼容问题
  • 原文地址:https://www.cnblogs.com/ms-uap/p/4218224.html
Copyright © 2020-2023  润新知