使用Windbg分析Windows Store 应用的崩溃问题

对于上架的windows store应用程序,微软提供了反馈机制让用户在程序崩溃的时候可以自动上传迷你转储(mini dump)文件。这些dump文件对于分析用户遇到的问题是相当有帮助的,这里我就如何使用windbg分析转储文件来做一个示范,我的目标是让即使是没用过windbg的人也能够使用它来分析转储文件,所以如果你发现文章中哪里有让你迷惑的地方,请告诉我。:) 首先,你需要有windows debugger tools,也就是windbg。这是一个强大的系统级调试工具,它附属于Windows WDK和Windows SDK安装包中,WDK这玩意儿太小众了,我们这边暂且不提,所以安装windbg的最佳办法就是安装Windows SDK了,Windows SDK很大,你在安装的时候你可以选择只安装Debugging Tools for Windows。Windows SDK for Windows 8.1的下载地址如下: http://msdn.microsoft.com/en-US/windows/desktop/bg162891 在安装完windbg以后,我们就可以来分析转储文件了。但是且慢,转储文件呢,转储文件到哪里去找? 如果你找不到的话,那么请随我来。当你的windows store应用上架以后,你就可以看到一个“报告”按钮。   点击这个“报告”按钮,你就可以看到应用程序的统计数据以及左边菜单栏中的“质量”链接:   点击“质量”链接你会看到程序关于质量方面统计数据,这里直接忽略前面的三项看第四项“最常见的崩溃情况”,这里就提供了客户上传的转储文件。   选取你想要看的转储文件,然后下载,下载的文件是一个cab格式的压缩包,将它解压缩就得到了dmp后缀的转储文件了。我们会在这里演示两个转储文件的分析。 用windbg打开第一个转储文件,windbg会在命令窗口中显示报错的代码,这通常是在系统的组件中,对我们查抄问题并没有帮助。比如以下就是载入转储文件后显示的内容: Windows 8.1 Version 9600 MP (4 procs) Free x86 compatible Product: WinNt, suite: SingleUserTS Personal Built by: 6.3.9600.16384 (winblue_rtm.130821-1623) Machine Name: Debug session time: Tue Jan 28…

0

一个由不合理布局导致Windows 8.1 store应用失去响应的例子

         如果我们忽视了Windows store应用的界面设计,通常你会得到一个糟糕的用户界面,然而你有没有想过在某种情况下却会导致应用程序失去响应甚至闪退,这里就有这样一个活生生的例子。          这个例子首先要从Windows 8 store应用的应用视图(application view)说起,Windows 8 Store应用有三种视图状态:full screen(程序填满整个屏幕), snapped(应用程序只占据了整个屏幕的一小部分),Fill(应用程序占据了snapped宽度剩余的区域)。所以在windows 8上设计Windows Store应用时,开发者通常会设计三种布局对应于这三种不同的视图。但是在Windows 8.1上取消了这三种视图状态,取而代之的是,应用商店程序可以在一定范围内任意调节应用的宽度,这个范围指的是应用程序有一个最小宽度设定,这通常是500个像素,您的Windows store应用至少要达到这个宽度,或者剩下空间至少有这个宽度。这样就给开发人员带来了挑战,我们不可能使用固定的布局,而是需要不同的宽度动态调整。如果不作调整的话,那么就有可能会发生下面这个问题。         为了重现这个问题,我们可以在Visual Studio  2013上创建一个基于Hub应用模板的Windows store应用,然后在ItemPage添加如下XAML代码: <Grid Grid.Row=”1″ x:Name=”contentRegion”> <Grid.ColumnDefinitions>      <ColumnDefinition x:Name=”firstColumn” Width=”600″/>      <ColumnDefinition x:Name=”secondColumn” Width=”*”/> </Grid.ColumnDefinitions>      <ScrollViewer Grid.Column=”1″ >           <TextBlock Margin=”40″ Text=”{Binding Content}” Style=”{StaticResource BaseTextBlockStyle}” />      </ScrollViewer> </Grid>         当你点击HubPage页面的项目时,应用就会跳转到ItemPage页面。在这个ItemPage页面会显示相应的文字。在全屏状态下,应用工作得很好很流畅。可是,如果你把应用的宽度调整到很小,比如500个像素,这时显示ItemPage页面时就会长时间失去响应,在一些极端的情况下甚至会应为失去响应时间过长而闪退。          实际上这个问题是由于Grid的第二列宽度太小而导致的。在这个页面里,你已经设置了第一个列的宽度为600,而出问题的时候应用的总宽度也不过500,这样留给第二列中的ScrollView里的TextBlock的宽度几乎就没有了。而在第二列中的这个TextBlock通常会有以下属性设置:            …

0

Improper UI layout cause windows store app busy hang in Windows 8.1

  Windows 8 store applications only need to maintain three application views: Full screen mode, snapped mode and filled mode. So the developers generally prepare three sets of UI layout. But in Windows 8.1, you can change the application width freely only if it’s large than the minimum width which is generally 500. It may…

0