I have captured a crash dump of my 32 bit .NET application running on a 64 bit Windows operating system. During the analysis somebody found out that I have a 64 bit dump and told me that it is not possible to analyze this dump due to wrong bitness.
When using Windows Task Manager to create the dump, I was not aware that I was doing something wrong. This always worked for 32 bit operating systems.
How can I take a good dump for .NET, especially with the correct bitness?
Why is bitness relevant here?
The bitness matters for .NET applications for the following reasons:
It is not possible to convert a dump from 64 bit to 32 bit, although in theory it should contain all necessary information.
If you're feeling lucky, you can also try some of the instructions anyway
How to detect the bitness of an application?
If you don't know the bitness, you can find it out like this:
Windows 7 Task Manager shows
*32
on processes:In Windows 8 task manager, go to the
Details
tab and add a column namedPlatform
:Visual Studio shows the bitness when attaching to the process:
Process Explorer can be configured to show the
Image Type
column:Tools
Programs which detect bitness automatically:
Tools which capture a dump with specific bitness:
-64
command line switchJust choose the bitness according to your application, not according the OS.
Why is memory relevant here?
For .NET you need a full memory dump, otherwise you cannot figure out the content of the objects. To include full memory, do the following:
/ma
when doing.dump
-ma
command line switchDumpType
to2
Visual Studio instructions
I found out that many developers aren't even aware that Visual Studio can create dumps. The reason probably is that the menu is invisible for a long time. These are the steps:
Why 64 bit dumps of 32 bit applications at all?
Probably just for debugging the WoW64 layer itself.