I have a simple application in the Windows 8 Store – it’s called kwiQR and it’s a QR scanning application.
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
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;
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;
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;
Now…what to do with a CAB file? Extract the contents I guess which gives me a couple of minidump files;
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 PresentSystem Information
——————
OS Version: 6.2.9200
CLR Version(s): 4.0.30319.17929Modules
——-
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;
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;
I’m hoping that will help me out here and I had a look at my symbol path inside the debugger;
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
I then hit the button in VS to debug this dump in ‘mixed mode’ (i.e. native + managed );
Which gave me the exception at a particular instruction;
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;
and that call-stack looks like it’s in need of symbols so loading them from my symbol path;
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
TriageDump2.dmp
From just hovering on the web page which was showing me;
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;
If you tap and invoke one of those, the app will crash. That’s an easy fix
So, that’s 2 bugs that the Windows Store found for me – got to be happy with that – time for an update…