Windows Store Applications–Debugging Crashes

I have a simple application in the Windows 8 Store – it’s called kwiQR and it’s a QR scanning application.

Promo846468

There’s a whole bunch of services that the Store provides to my application but one that I haven’t seen a whole lot written about is the idea that the Store can report quality metrics for me.

There is a section on the developer site about these quality metrics.

My application is written in XAML and .NET and one part of those quality metrics is a collection of crash dumps and, yes, unfortunately I noticed that my app has been crashing Sad smile

image

I’m not happy with 57 crash reports and so I’m immediately minded to try and dig into these. The first thing I’d say is that it is well worth trying to hover on that webpage over the exception codes because you’ll quickly get to see;

image

and so I already know just from hovering here what method I should be looking at in my code to try and diagnose this crash. That’s pretty handy. For my other crash;

image

and so I know straight away that’s not necessarily my code but, of course, I could be causing the problem.

To try and see what’s going on so I downloaded the 2 CAB files that the Store has captured for me;

image

Now…what to do with a CAB file? Extract the contents I guess which gives me a couple of minidump files;

image

What to do with these minidump files? I could open them up in Visual Studio or I could open them up in WinDbg (or another debugger like cdb) but let’s go with Visual Studio.

I decided that I’d try the bigger dump file first.

TriageDump1.dmp

If you open up a .dmp file like this (File->Open File) from Visual Studio 2012 then you get a nice description of the dump file (you don’t have to have 2012 for this – I think minidump opening has been around for a few versions).

Visual Studio nicely lets me copy all of this to the clipboard so here is my dirty laundry;

Dump Summary
————
Dump File:    triagedump1.dmp : C:\temp\Crashes\triagedump1.dmp
Last Write Time:    14/09/2012 12:39:58
Process Name:    kwiQR.exe : kwiQR.exe
Process Architecture:    x86
Exception Code:    0xC0000005
Exception Information:    The thread tried to read from or write to a virtual address for which it does not have the appropriate access.
Heap Information:    Not Present

System Information
——————
OS Version:    6.2.9200
CLR Version(s):    4.0.30319.17929

Modules
——-
Module Name    Module Path    Module Version
———–    ———–    ————–
kwiQR.exe    kwiQR.exe    1.7.5.0
ntdll.dll    ntdll.dll    6.2.9200.16384
mscoree.dll    mscoree.dll    4.0.41209.0
kernel32.dll    kernel32.dll    6.2.9200.16384
KERNELBASE.dll    KERNELBASE.dll    6.2.9200.16384
advapi32.dll    advapi32.dll    6.2.9200.16384
msvcrt.dll    msvcrt.dll    7.0.9200.16384
sechost.dll    sechost.dll    6.2.9200.16384
rpcrt4.dll    rpcrt4.dll    6.2.9200.16384
mscoreei.dll    mscoreei.dll    4.0.30319.17929
shlwapi.dll    shlwapi.dll    6.2.9200.16384
user32.dll    user32.dll    6.2.9200.16384
gdi32.dll    gdi32.dll    6.2.9200.16384
imm32.dll    imm32.dll    6.2.9200.16384
msctf.dll    msctf.dll    6.2.9200.16384
clr.dll    clr.dll    4.0.30319.17929
MSVCR110_CLR0400.dll    MSVCR110_CLR0400.dll    11.0.50709.17929
combase.dll    combase.dll    6.2.9200.16384
CRYPTBASE.dll    CRYPTBASE.dll    6.2.9200.16384
bcryptPrimitives.dll    bcryptPrimitives.dll    6.2.9200.16384
ole32.dll    ole32.dll    6.2.9200.16384
mscorlib.ni.dll    mscorlib.ni.dll    4.0.30319.17929
System.Runtime.ni.dll    System.Runtime.ni.dll    4.0.30319.17929
twinapi.dll    twinapi.dll    6.2.9200.16384
WinTypes.dll    WinTypes.dll    6.2.9200.16384
clrjit.dll    clrjit.dll    4.0.30319.17929
Windows.UI.Xaml.ni.dll    Windows.UI.Xaml.ni.dll    0.0.0.0
System.Runtime.InteropServices.WindowsRuntime.ni.dll    System.Runtime.InteropServices.WindowsRuntime.ni.dll    4.0.30319.17929
Windows.UI.Xaml.dll    Windows.UI.Xaml.dll    6.2.9200.16384
ninput.dll    ninput.dll    6.2.9200.16384
shell32.dll    shell32.dll    6.2.9200.16384
oleaut32.dll    oleaut32.dll    6.2.9200.16384
wininet.dll    wininet.dll    10.0.9200.16384
d3d11.dll    d3d11.dll    6.2.9200.16384
dwmapi.dll    dwmapi.dll    6.2.9200.16384
uxtheme.dll    uxtheme.dll    6.2.9200.16384
urlmon.dll    urlmon.dll    10.0.9200.16384
UIAutomationCore.DLL    UIAutomationCore.DLL    7.2.9200.16384
iertutil.dll    iertutil.dll    10.0.9200.16384
dxgi.dll    dxgi.dll    6.2.9200.16384
SHCore.dll    SHCore.dll    6.2.9200.16384
cryptsp.dll    cryptsp.dll    6.2.9200.16384
rsaenh.dll    rsaenh.dll    6.2.9200.16384
tiptsf.dll    tiptsf.dll    6.2.9200.16384
actxprxy.dll    actxprxy.dll    6.2.9200.16384
Windows.UI.Immersive.dll    Windows.UI.Immersive.dll    6.2.9200.16384
dui70.dll    dui70.dll    6.2.9200.16384
DWrite.dll    DWrite.dll    6.2.9200.16384
aticfx32.dll    aticfx32.dll    8.17.10.1083
atiuxpag.dll    atiuxpag.dll    8.14.1.6214
version.dll    version.dll    6.2.9200.16384
atidxx32.dll    atidxx32.dll    8.17.10.362
Windows.ApplicationModel.ni.dll    Windows.ApplicationModel.ni.dll    0.0.0.0
MrmCoreR.dll    MrmCoreR.dll    6.2.9200.16384
Bcp47Langs.dll    Bcp47Langs.dll    6.2.9200.16384
profapi.dll    profapi.dll    6.2.9200.16384
d2d1.dll    d2d1.dll    6.2.9200.16384
D3D10Warp.dll    D3D10Warp.dll    6.2.9200.16384
System.Collections.ni.dll    System.Collections.ni.dll    4.0.30319.17929
bcrypt.dll    bcrypt.dll    6.2.9200.16384
Windows.UI.ni.dll    Windows.UI.ni.dll    0.0.0.0
System.ObjectModel.ni.dll    System.ObjectModel.ni.dll    4.0.30319.17929
System.ni.dll    System.ni.dll    4.0.30319.17929
windows.ui.dll    windows.ui.dll    6.2.9200.16384
dcomp.dll    dcomp.dll    6.2.9200.16384
System.Threading.Tasks.ni.dll    System.Threading.Tasks.ni.dll    4.0.30319.17929
System.Runtime.WindowsRuntime.ni.dll    System.Runtime.WindowsRuntime.ni.dll    4.0.30319.17929
Windows.Storage.ni.dll    Windows.Storage.ni.dll    0.0.0.0
System.Runtime.WindowsRuntime.UI.Xaml.ni.dll    System.Runtime.WindowsRuntime.UI.Xaml.ni.dll    4.0.30319.17929
Windows.Foundation.ni.dll    Windows.Foundation.ni.dll    0.0.0.0
Windows.Storage.ApplicationData.dll    Windows.Storage.ApplicationData.dll    6.2.9200.16384
Windows.ApplicationModel.dll    Windows.ApplicationModel.dll    6.2.9200.16384
System.Threading.ni.dll    System.Threading.ni.dll    4.0.30319.17929
System.Linq.ni.dll    System.Linq.ni.dll    4.0.30319.17929
System.Core.ni.dll    System.Core.ni.dll    4.0.30319.17929
System.IO.ni.dll    System.IO.ni.dll    4.0.30319.17929
System.Runtime.Extensions.ni.dll    System.Runtime.Extensions.ni.dll    4.0.30319.17929
propsys.dll    propsys.dll    7.0.9200.16384
Windows.Data.ni.dll    Windows.Data.ni.dll    0.0.0.0
wpnapps.dll    wpnapps.dll    6.2.9200.16384
windowscodecs.dll    windowscodecs.dll    6.2.9200.16384
oleacc.dll    oleacc.dll    7.2.9200.16384
avrt.dll    avrt.dll    6.2.9200.16384
Windows.Devices.ni.dll    Windows.Devices.ni.dll    0.0.0.0
Windows.Devices.Enumeration.dll    Windows.Devices.Enumeration.dll    6.2.9200.16384
cfgmgr32.dll    cfgmgr32.dll    6.2.9200.16384
StructuredQuery.dll    StructuredQuery.dll    7.0.9200.16384
secur32.dll    secur32.dll    6.2.9200.16384
sspicli.dll    sspicli.dll    6.2.9200.16384
NaturalLanguage6.dll    NaturalLanguage6.dll    6.2.9200.16384
crypt32.dll    crypt32.dll    6.2.9200.16384
msasn1.dll    msasn1.dll    6.2.9200.16384
NLSData0009.dll    NLSData0009.dll    6.2.9200.16384
NLSLexicons0009.dll    NLSLexicons0009.dll    6.2.9200.16384
DevDispItemProvider.dll    DevDispItemProvider.dll    6.2.9200.16384
DefaultDeviceManager.dll    DefaultDeviceManager.dll    6.2.9200.16384
DefaultPrinterProvider.dll    DefaultPrinterProvider.dll    6.2.9200.16384
winspool.drv    winspool.drv    6.2.9200.16384
DDORes.dll    DDORes.dll    6.2.9200.16384
Windows.Devices.Enumeration.PS.dll    Windows.Devices.Enumeration.PS.dll    6.2.9200.16384
Windows.Media.dll    Windows.Media.dll    6.2.9200.16384
mfplat.dll    mfplat.dll    12.0.9200.16384
mfcore.dll    mfcore.dll    12.0.9200.16384
ksuser.dll    ksuser.dll    6.2.9200.16384
atiu9pag.dll    atiu9pag.dll    8.14.1.6214
MFCaptureEngine.dll    MFCaptureEngine.dll    12.0.9200.16384
MFReadWrite.dll    MFReadWrite.dll    12.0.9200.16384
devobj.dll    devobj.dll    6.2.9200.16384
msvproc.dll    msvproc.dll    12.0.9200.16384
mf.dll    mf.dll    12.0.9200.16384
mfnetcore.dll    mfnetcore.dll    12.0.9200.16384
deviceaccess.dll    deviceaccess.dll    6.2.9200.16384
sxs.dll    sxs.dll    6.2.9200.16384
vidcap.ax    vidcap.ax    6.2.9200.16384
Windows.Media.MediaControl.dll    Windows.Media.MediaControl.dll    6.2.9200.16384
MMDevAPI.dll    MMDevAPI.dll    6.2.9200.16384
mfps.dll    mfps.dll    12.0.9200.16384
Windows.Devices.Sensors.dll    Windows.Devices.Sensors.dll    6.2.9200.16384
userenv.dll    userenv.dll    6.2.9200.16384
profext.dll    profext.dll    6.2.9200.16384
Windows.Graphics.ni.dll    Windows.Graphics.ni.dll    0.0.0.0
Windows.Graphics.dll    Windows.Graphics.dll    6.2.9200.16384
PhotoMetadataHandler.dll    PhotoMetadataHandler.dll    6.2.9200.16384
System.Text.Encoding.ni.dll    System.Text.Encoding.ni.dll    4.0.30319.17929
System.Reflection.ni.dll    System.Reflection.ni.dll    4.0.30319.17929
ntmarta.dll    ntmarta.dll    6.2.9200.16384
msxml6.dll    msxml6.dll    6.30.9200.16384
Windows.System.ni.dll    Windows.System.ni.dll    0.0.0.0
twinui.dll    twinui.dll    6.2.9200.16384
xmllite.dll    xmllite.dll    6.2.9200.16384
System.Runtime.Serialization.Xml.ni.dll    System.Runtime.Serialization.Xml.ni.dll    4.0.30319.17929
System.Runtime.Serialization.ni.dll    System.Runtime.Serialization.ni.dll    4.0.30319.17929
SMDiagnostics.ni.dll    SMDiagnostics.ni.dll    4.0.30319.17929
System.Xml.ni.dll    System.Xml.ni.dll    4.0.30319.17929
System.ServiceModel.Internals.ni.dll    System.ServiceModel.Internals.ni.dll    4.0.30319.17929
System.Configuration.ni.dll    System.Configuration.ni.dll    4.0.30319.17929
D3D10Level9.dll    D3D10Level9.dll    6.2.9200.16384
atiumdag.dll    atiumdag.dll    7.14.10.841
atiumdva.dll    atiumdva.dll    8.14.10.312

and straight away from that 0xC0000005 I can see that this is an access violation. Someone dereferenced something they shouldn’t have dereferenced. Inside of Visual Studio, this looks more like;

image

What I need to be able to do is to debug this and (at least) try and get to a call-stack and possibly some code that shows me where things went wrong. When I submitted my application package to the store I was careful to make sure that I included the option in Visual Studio to include symbols although I didn’t pay it a lot of attention at the time – it just felt like the right default to me as I’ve been a big fan of shipping symbols with release code for a long time;

image

I’m hoping that will help me out here and I had a look at my symbol path inside the debugger;

image

image

and I’m using the public symbol server and I have symbols cached into my local file system. Note – the first time that you set this stuff up, you can wait a long time for all the symbols to trickle down from the web but it’s worth it Smile

I then hit the button in VS to debug this dump in ‘mixed mode’ (i.e. native + managed );

image

Which gave me the exception at a particular instruction;

image

So that’s a null reference rather than any other kind of access violation. Dismissing this dialog and looking at the disassembly and call-stack gives me;

image

and that call-stack looks like it’s in need of symbols so loading them from my symbol path;

image

gives me a better call stack once I’ve repeated the process to load the symbols for user32.dll, windows.ui.dll and that gives me a call-stack;

>    Windows.UI.Xaml.dll!HWWalk::RenderContentAndChildren(CUIElement * pUIElement, HWRenderParams & myRP, D2DRenderContext & d2dRenderContext, unsigned int requiresRedirectedDrawing, unsigned int elementHasCompNode)  Line 3196 + 0xa bytes    C++
     Windows.UI.Xaml.dll!HWWalk::RenderProperties(CUIElement * pUIElement, const HWRenderParams & parentRP, D2DRenderContext & d2dRenderContext, unsigned int requiresRedirectedDrawing, unsigned int * pSkipRenderWhileInheritedCollapsed, unsigned int * pSkipRenderWhileTransparent, unsigned int * pSkipRenderWhileClippedOut, unsigned int * pSkipRenderWhileLayoutClippedOut, unsigned int * pSkipRenderWhileTransformTooSmall)  Line 629 + 0x22 bytes    C++
     Windows.UI.Xaml.dll!HWWalk::Render(CUIElement * pUIElement, const HWRenderParams & parentRP, D2DRenderContext & d2dRenderContext, unsigned int redirectedDraw)  Line 199 + 0x26 bytes    C++
     Windows.UI.Xaml.dll!HWWalk::RenderContentAndChildren(CUIElement * pUIElement, HWRenderParams & myRP, D2DRenderContext & d2dRenderContext, unsigned int requiresRedirectedDrawing, unsigned int elementHasCompNode)  Line 3461 + 0x115 bytes    C++
     Windows.UI.Xaml.dll!HWWalk::RenderProperties(CUIElement * pUIElement, const HWRenderParams & parentRP, D2DRenderContext & d2dRenderContext, unsigned int requiresRedirectedDrawing, unsigned int * pSkipRenderWhileInheritedCollapsed, unsigned int * pSkipRenderWhileTransparent, unsigned int * pSkipRenderWhileClippedOut, unsigned int * pSkipRenderWhileLayoutClippedOut, unsigned int * pSkipRenderWhileTransformTooSmall)  Line 629 + 0x22 bytes    C++
     Windows.UI.Xaml.dll!HWWalk::Render(CUIElement * pUIElement, const HWRenderParams & parentRP, D2DRenderContext & d2dRenderContext, unsigned int redirectedDraw)  Line 199 + 0x26 bytes    C++
     Windows.UI.Xaml.dll!HWWalk::RenderContentAndChildren(CUIElement * pUIElement, HWRenderParams & myRP, D2DRenderContext & d2dRenderContext, unsigned int requiresRedirectedDrawing, unsigned int elementHasCompNode)  Line 3461 + 0x115 bytes    C++
     Windows.UI.Xaml.dll!HWWalk::RenderProperties(CUIElement * pUIElement, const HWRenderParams & parentRP, D2DRenderContext & d2dRenderContext, unsigned int requiresRedirectedDrawing, unsigned int * pSkipRenderWhileInheritedCollapsed, unsigned int * pSkipRenderWhileTransparent, unsigned int * pSkipRenderWhileClippedOut, unsigned int * pSkipRenderWhileLayoutClippedOut, unsigned int * pSkipRenderWhileTransformTooSmall)  Line 629 + 0x22 bytes    C++
     Windows.UI.Xaml.dll!HWWalk::Render(CUIElement * pUIElement, const HWRenderParams & parentRP, D2DRenderContext & d2dRenderContext, unsigned int redirectedDraw)  Line 199 + 0x26 bytes    C++
     Windows.UI.Xaml.dll!HWWalk::RenderContentAndChildren(CUIElement * pUIElement, HWRenderParams & myRP, D2DRenderContext & d2dRenderContext, unsigned int requiresRedirectedDrawing, unsigned int elementHasCompNode)  Line 3461 + 0x115 bytes    C++
     Windows.UI.Xaml.dll!HWWalk::RenderProperties(CUIElement * pUIElement, const HWRenderParams & parentRP, D2DRenderContext & d2dRenderContext, unsigned int requiresRedirectedDrawing, unsigned int * pSkipRenderWhileInheritedCollapsed, unsigned int * pSkipRenderWhileTransparent, unsigned int * pSkipRenderWhileClippedOut, unsigned int * pSkipRenderWhileLayoutClippedOut, unsigned int * pSkipRenderWhileTransformTooSmall)  Line 629 + 0x22 bytes    C++
     Windows.UI.Xaml.dll!HWWalk::Render(CUIElement * pUIElement, const HWRenderParams & parentRP, D2DRenderContext & d2dRenderContext, unsigned int redirectedDraw)  Line 199 + 0x26 bytes    C++
     Windows.UI.Xaml.dll!HWWalk::RenderContentAndChildren(CUIElement * pUIElement, HWRenderParams & myRP, D2DRenderContext & d2dRenderContext, unsigned int requiresRedirectedDrawing, unsigned int elementHasCompNode)  Line 3461 + 0x115 bytes    C++
     Windows.UI.Xaml.dll!HWWalk::RenderProperties(CUIElement * pUIElement, const HWRenderParams & parentRP, D2DRenderContext & d2dRenderContext, unsigned int requiresRedirectedDrawing, unsigned int * pSkipRenderWhileInheritedCollapsed, unsigned int * pSkipRenderWhileTransparent, unsigned int * pSkipRenderWhileClippedOut, unsigned int * pSkipRenderWhileLayoutClippedOut, unsigned int * pSkipRenderWhileTransformTooSmall)  Line 629 + 0x22 bytes    C++
     Windows.UI.Xaml.dll!HWWalk::Render(CUIElement * pUIElement, const HWRenderParams & parentRP, D2DRenderContext & d2dRenderContext, unsigned int redirectedDraw)  Line 199 + 0x26 bytes    C++
     Windows.UI.Xaml.dll!HWWalk::RenderContentAndChildren(CUIElement * pUIElement, HWRenderParams & myRP, D2DRenderContext & d2dRenderContext, unsigned int requiresRedirectedDrawing, unsigned int elementHasCompNode)  Line 3461 + 0x115 bytes    C++
     Windows.UI.Xaml.dll!HWWalk::RenderProperties(CUIElement * pUIElement, const HWRenderParams & parentRP, D2DRenderContext & d2dRenderContext, unsigned int requiresRedirectedDrawing, unsigned int * pSkipRenderWhileInheritedCollapsed, unsigned int * pSkipRenderWhileTransparent, unsigned int * pSkipRenderWhileClippedOut, unsigned int * pSkipRenderWhileLayoutClippedOut, unsigned int * pSkipRenderWhileTransformTooSmall)  Line 629 + 0x22 bytes    C++
     Windows.UI.Xaml.dll!HWWalk::Render(CUIElement * pUIElement, const HWRenderParams & parentRP, D2DRenderContext & d2dRenderContext, unsigned int redirectedDraw)  Line 199 + 0x26 bytes    C++
     Windows.UI.Xaml.dll!HWWalk::RenderContentAndChildren(CUIElement * pUIElement, HWRenderParams & myRP, D2DRenderContext & d2dRenderContext, unsigned int requiresRedirectedDrawing, unsigned int elementHasCompNode)  Line 3461 + 0x115 bytes    C++
     Windows.UI.Xaml.dll!HWWalk::RenderProperties(CUIElement * pUIElement, const HWRenderParams & parentRP, D2DRenderContext & d2dRenderContext, unsigned int requiresRedirectedDrawing, unsigned int * pSkipRenderWhileInheritedCollapsed, unsigned int * pSkipRenderWhileTransparent, unsigned int * pSkipRenderWhileClippedOut, unsigned int * pSkipRenderWhileLayoutClippedOut, unsigned int * pSkipRenderWhileTransformTooSmall)  Line 629 + 0x22 bytes    C++
     Windows.UI.Xaml.dll!HWWalk::Render(CUIElement * pUIElement, const HWRenderParams & parentRP, D2DRenderContext & d2dRenderContext, unsigned int redirectedDraw)  Line 199 + 0x26 bytes    C++
     Windows.UI.Xaml.dll!HWWalk::RenderContentAndChildren(CUIElement * pUIElement, HWRenderParams & myRP, D2DRenderContext & d2dRenderContext, unsigned int requiresRedirectedDrawing, unsigned int elementHasCompNode)  Line 3461 + 0x115 bytes    C++
     Windows.UI.Xaml.dll!HWWalk::RenderProperties(CUIElement * pUIElement, const HWRenderParams & parentRP, D2DRenderContext & d2dRenderContext, unsigned int requiresRedirectedDrawing, unsigned int * pSkipRenderWhileInheritedCollapsed, unsigned int * pSkipRenderWhileTransparent, unsigned int * pSkipRenderWhileClippedOut, unsigned int * pSkipRenderWhileLayoutClippedOut, unsigned int * pSkipRenderWhileTransformTooSmall)  Line 629 + 0x22 bytes    C++
     Windows.UI.Xaml.dll!HWWalk::Render(CUIElement * pUIElement, const HWRenderParams & parentRP, D2DRenderContext & d2dRenderContext, unsigned int redirectedDraw)  Line 199 + 0x26 bytes    C++
     Windows.UI.Xaml.dll!HWWalk::RenderContentAndChildren(CUIElement * pUIElement, HWRenderParams & myRP, D2DRenderContext & d2dRenderContext, unsigned int requiresRedirectedDrawing, unsigned int elementHasCompNode)  Line 3461 + 0x115 bytes    C++
     Windows.UI.Xaml.dll!HWWalk::RenderProperties(CUIElement * pUIElement, const HWRenderParams & parentRP, D2DRenderContext & d2dRenderContext, unsigned int requiresRedirectedDrawing, unsigned int * pSkipRenderWhileInheritedCollapsed, unsigned int * pSkipRenderWhileTransparent, unsigned int * pSkipRenderWhileClippedOut, unsigned int * pSkipRenderWhileLayoutClippedOut, unsigned int * pSkipRenderWhileTransformTooSmall)  Line 629 + 0x22 bytes    C++
     Windows.UI.Xaml.dll!HWWalk::Render(CUIElement * pUIElement, const HWRenderParams & parentRP, D2DRenderContext & d2dRenderContext, unsigned int redirectedDraw)  Line 199 + 0x26 bytes    C++
     Windows.UI.Xaml.dll!HWWalk::RenderContentAndChildren(CUIElement * pUIElement, HWRenderParams & myRP, D2DRenderContext & d2dRenderContext, unsigned int requiresRedirectedDrawing, unsigned int elementHasCompNode)  Line 3461 + 0x115 bytes    C++
     Windows.UI.Xaml.dll!HWWalk::RenderProperties(CUIElement * pUIElement, const HWRenderParams & parentRP, D2DRenderContext & d2dRenderContext, unsigned int requiresRedirectedDrawing, unsigned int * pSkipRenderWhileInheritedCollapsed, unsigned int * pSkipRenderWhileTransparent, unsigned int * pSkipRenderWhileClippedOut, unsigned int * pSkipRenderWhileLayoutClippedOut, unsigned int * pSkipRenderWhileTransformTooSmall)  Line 629 + 0x22 bytes    C++
     Windows.UI.Xaml.dll!HWWalk::Render(CUIElement * pUIElement, const HWRenderParams & parentRP, D2DRenderContext & d2dRenderContext, unsigned int redirectedDraw)  Line 199 + 0x26 bytes    C++
     Windows.UI.Xaml.dll!HWWalk::RenderContentAndChildren(CUIElement * pUIElement, HWRenderParams & myRP, D2DRenderContext & d2dRenderContext, unsigned int requiresRedirectedDrawing, unsigned int elementHasCompNode)  Line 3461 + 0x115 bytes    C++
     Windows.UI.Xaml.dll!HWWalk::RenderProperties(CUIElement * pUIElement, const HWRenderParams & parentRP, D2DRenderContext & d2dRenderContext, unsigned int requiresRedirectedDrawing, unsigned int * pSkipRenderWhileInheritedCollapsed, unsigned int * pSkipRenderWhileTransparent, unsigned int * pSkipRenderWhileClippedOut, unsigned int * pSkipRenderWhileLayoutClippedOut, unsigned int * pSkipRenderWhileTransformTooSmall)  Line 629 + 0x22 bytes    C++
     Windows.UI.Xaml.dll!HWWalk::Render(CUIElement * pUIElement, const HWRenderParams & parentRP, D2DRenderContext & d2dRenderContext, unsigned int redirectedDraw)  Line 199 + 0x26 bytes    C++
     Windows.UI.Xaml.dll!HWWalk::RenderContentAndChildren(CUIElement * pUIElement, HWRenderParams & myRP, D2DRenderContext & d2dRenderContext, unsigned int requiresRedirectedDrawing, unsigned int elementHasCompNode)  Line 3461 + 0x115 bytes    C++
     Windows.UI.Xaml.dll!HWWalk::RenderProperties(CUIElement * pUIElement, const HWRenderParams & parentRP, D2DRenderContext & d2dRenderContext, unsigned int requiresRedirectedDrawing, unsigned int * pSkipRenderWhileInheritedCollapsed, unsigned int * pSkipRenderWhileTransparent, unsigned int * pSkipRenderWhileClippedOut, unsigned int * pSkipRenderWhileLayoutClippedOut, unsigned int * pSkipRenderWhileTransformTooSmall)  Line 629 + 0x22 bytes    C++
     Windows.UI.Xaml.dll!HWWalk::Render(CUIElement * pUIElement, const HWRenderParams & parentRP, D2DRenderContext & d2dRenderContext, unsigned int redirectedDraw)  Line 199 + 0x26 bytes    C++
     Windows.UI.Xaml.dll!HWWalk::RenderContentAndChildren(CUIElement * pUIElement, HWRenderParams & myRP, D2DRenderContext & d2dRenderContext, unsigned int requiresRedirectedDrawing, unsigned int elementHasCompNode)  Line 3461 + 0x115 bytes    C++
     Windows.UI.Xaml.dll!HWWalk::RenderProperties(CUIElement * pUIElement, const HWRenderParams & parentRP, D2DRenderContext & d2dRenderContext, unsigned int requiresRedirectedDrawing, unsigned int * pSkipRenderWhileInheritedCollapsed, unsigned int * pSkipRenderWhileTransparent, unsigned int * pSkipRenderWhileClippedOut, unsigned int * pSkipRenderWhileLayoutClippedOut, unsigned int * pSkipRenderWhileTransformTooSmall)  Line 629 + 0x22 bytes    C++
     Windows.UI.Xaml.dll!HWWalk::Render(CUIElement * pUIElement, const HWRenderParams & parentRP, D2DRenderContext & d2dRenderContext, unsigned int redirectedDraw)  Line 199 + 0x26 bytes    C++
     Windows.UI.Xaml.dll!HWWalk::RenderContentAndChildren(CUIElement * pUIElement, HWRenderParams & myRP, D2DRenderContext & d2dRenderContext, unsigned int requiresRedirectedDrawing, unsigned int elementHasCompNode)  Line 3461 + 0x115 bytes    C++
     Windows.UI.Xaml.dll!HWWalk::RenderProperties(CUIElement * pUIElement, const HWRenderParams & parentRP, D2DRenderContext & d2dRenderContext, unsigned int requiresRedirectedDrawing, unsigned int * pSkipRenderWhileInheritedCollapsed, unsigned int * pSkipRenderWhileTransparent, unsigned int * pSkipRenderWhileClippedOut, unsigned int * pSkipRenderWhileLayoutClippedOut, unsigned int * pSkipRenderWhileTransformTooSmall)  Line 629 + 0x22 bytes    C++
     Windows.UI.Xaml.dll!HWWalk::Render(CUIElement * pUIElement, const HWRenderParams & parentRP, D2DRenderContext & d2dRenderContext, unsigned int redirectedDraw)  Line 199 + 0x26 bytes    C++
     Windows.UI.Xaml.dll!HWWalk::RenderContentAndChildren(CUIElement * pUIElement, HWRenderParams & myRP, D2DRenderContext & d2dRenderContext, unsigned int requiresRedirectedDrawing, unsigned int elementHasCompNode)  Line 3461 + 0x115 bytes    C++
     Windows.UI.Xaml.dll!HWWalk::RenderProperties(CUIElement * pUIElement, const HWRenderParams & parentRP, D2DRenderContext & d2dRenderContext, unsigned int requiresRedirectedDrawing, unsigned int * pSkipRenderWhileInheritedCollapsed, unsigned int * pSkipRenderWhileTransparent, unsigned int * pSkipRenderWhileClippedOut, unsigned int * pSkipRenderWhileLayoutClippedOut, unsigned int * pSkipRenderWhileTransformTooSmall)  Line 629 + 0x22 bytes    C++
     Windows.UI.Xaml.dll!HWWalk::Render(CUIElement * pUIElement, const HWRenderParams & parentRP, D2DRenderContext & d2dRenderContext, unsigned int redirectedDraw)  Line 199 + 0x26 bytes    C++
     Windows.UI.Xaml.dll!HWWalk::RenderContentAndChildren(CUIElement * pUIElement, HWRenderParams & myRP, D2DRenderContext & d2dRenderContext, unsigned int requiresRedirectedDrawing, unsigned int elementHasCompNode)  Line 3461 + 0x115 bytes    C++
     Windows.UI.Xaml.dll!HWWalk::RenderProperties(CUIElement * pUIElement, const HWRenderParams & parentRP, D2DRenderContext & d2dRenderContext, unsigned int requiresRedirectedDrawing, unsigned int * pSkipRenderWhileInheritedCollapsed, unsigned int * pSkipRenderWhileTransparent, unsigned int * pSkipRenderWhileClippedOut, unsigned int * pSkipRenderWhileLayoutClippedOut, unsigned int * pSkipRenderWhileTransformTooSmall)  Line 629 + 0x22 bytes    C++
     Windows.UI.Xaml.dll!HWWalk::Render(CUIElement * pUIElement, const HWRenderParams & parentRP, D2DRenderContext & d2dRenderContext, unsigned int redirectedDraw)  Line 199 + 0x26 bytes    C++
     Windows.UI.Xaml.dll!HWWalk::RenderRoot(CUIElement * pVisualRoot, CRenderTarget * pRenderTarget, HWInstance * pPersistentRenderDataSentinel, HWCrossFrameResources * pCrossFrameResources, HWFrameData * pPreviousFrameData, unsigned int backgroundColor, unsigned int forceRedraw, unsigned int needsToReleaseHardwareResources, unsigned int isOverdrawHeatMapEnabled, TransformAndClipStack * pPrependTransformAndClip, const CMILMatrix & displayOrientationTransform, const CMILMatrix & displayOrientationTransformInverse, unsigned int forceAllSlotsDirty, HWCompTreeNode * * ppRootNode, BrushCloneList * * ppBrushCloneList, unsigned int * pHasRenderedContent)  Line 3847 + 0x16 bytes    C++
     Windows.UI.Xaml.dll!CCoreServices::RenderWalk(HWWalk * pHWWalk, ICoreRenderTarget * pIRenderTarget, VisualTree * pVisualTree, CSwapChainBackgroundPanel * pSCBP, unsigned int uBackgroundColor, unsigned int forceRedraw, unsigned int needsToReleaseHardwareResources, unsigned int isOverdrawHeatMapEnabled, unsigned int forceAllSlotsDirty)  Line 11474 + 0x47 bytes    C++
     Windows.UI.Xaml.dll!CCoreServices::NWDrawTree(HWWalk * pHWWalk, ICoreRenderTarget * pIRenderTarget, VisualTree * pVisualTree, unsigned int uBackgroundColor, unsigned int forceRedraw, unsigned int needsToReleaseHardwareResources, XRECT_WH * prcDirtyRect)  Line 10981    C++
     Windows.UI.Xaml.dll!CCoreServices::NWDrawMainTree(ICoreRenderTarget * pIRenderTarget, unsigned int fForceRedraw, unsigned int needsToReleaseHardwareResources, XRECT_WH * prcDirtyRect)  Line 10693 + 0x20a bytes    C++
     Windows.UI.Xaml.dll!CWindowRenderTarget::Draw(ICoreServices * pCore, unsigned int fForceRedraw, XRECT_WH * prcDirtyRect)  Line 128 + 0x2a bytes    C++
     Windows.UI.Xaml.dll!CXcpBrowserHost::OnTick()  Line 1160 + 0x3c bytes    C++
     Windows.UI.Xaml.dll!CXcpDispatcher::Tick()  Line 1120 + 0x8 bytes    C++
     Windows.UI.Xaml.dll!CXcpDispatcher::OnReentrancyProtectedWindowMessage(HWND__ * hwnd, unsigned int msg, unsigned int wParam, long lParam)  Line 653    C++
     Windows.UI.Xaml.dll!CXcpDispatcher::WindowProc(HWND__ * hwnd, unsigned int msg, unsigned int wParam, long lParam)  Line 401 + 0x24 bytes    C++
     user32.dll!_InternalCallWinProc@20()  + 0x23 bytes   
     user32.dll!_UserCallWinProcCheckWow@32()  + 0x120 bytes   
     user32.dll!_DispatchMessageWorker@8()  + 0x19e bytes   
     user32.dll!_DispatchMessageW@4()  + 0x10 bytes   
     windows.ui.dll!Windows::UI::Core::CDispatcher::ProcessMessage(int bDrainQueue, int * pbAnyMessages)  Line 121    C++
     windows.ui.dll!Windows::UI::Core::CDispatcher::ProcessEvents(Windows::UI::Core::CoreProcessEventsOption options)  Line 184 + 0x10 bytes    C++
     Windows.UI.Xaml.dll!CJupiterWindow::RunCoreWindowMessageLoop()  Line 416 + 0xb bytes    C++
     Windows.UI.Xaml.dll!CJupiterControl::RunMessageLoop()  Line 714 + 0x5 bytes    C++
     Windows.UI.Xaml.dll!DirectUI::DXamlCore::RunMessageLoop()  Line 2539 + 0x5 bytes    C++
     Windows.UI.Xaml.dll!DirectUI::FrameworkView::Run()  Line 91    C++

Now I can’t actually see any of my code on this call-stack so I wasn’t entirely sure what I could do with it and so I asked Tim and apparently I’d hit a bug to do with camera switching but there are some easy workarounds for that bug so once I knew where the crash was coming from it didn’t take me very long to repro the bug on my own machine and the I applied a workaround and I don’t seem to be able to repro it any more so I’ll ship an update to my app in the Store (V1.7.7.0) and the quality report has helped me identify a problem that I didn’t know I had Smile

TriageDump2.dmp

From just hovering on the web page which was showing me;

image

I had a good idea of what might be going wrong. In my application you can scan QR codes and then launch them such that (e.g.) if the QR Code contains a web address then this will launch the browser whereas if the QR code contains a telephone number then it might launch Lync for example.

My code which tries to do this looks like;

    public async virtual void InvokeAsync()
    {
      await Launcher.LaunchUriAsync(new Uri(this.CodeContent));
    }

and I’ve probably just been a little naive in thinking that whatever QR code content ends up in this function can actually be passed to the Uri constructor without expecting a problem here and there. I should have known this because I very deliberately made sure that my app would have explicit support for certain QR codes (phone, tel, mail, web, contacts in VCARD and MECARD formats) but I tried to make sure that if I didn’t explicitly recognise the type of code being used I could still handle it.

That is until we get to this piece of code here which assumes that this is a URI and crashes if it’s not.

And so while my UI can display an unknown type of QR code;

image

If you tap and invoke one of those, the app will crash. That’s an easy fix Smile

So, that’s 2 bugs that the Windows Store found for me – got to be happy with that – time for an update…