What settings should be used with Minidumps?

We currently call MiniDumpWriteDump flags of MiniDumpNormal | MiniDumpWithIndirectlyReferencedMemory MiniDumpNormal | MiniDumpWithIndirectlyReferencedMemory . This works great for internal builds in the Debug configuration, but does not provide as much information as we need in the Release configuration.

In the release, minidump data contains enough stack information for the debugger to determine where the code crashed, but no other data. I do not just mean that local variables are missing due to optimization, as expected in the Release assembly - I mean that there is nothing useful other than a call stack and the current line of code. No registers, no local residents, no globals, no objects that local residents point to - nothing. We don’t even get a 'this' which allows us to view the current object. This makes sense to use MiniDumpWithIndirectlyReferencedMemory - it should have included memory referenced by local and stack variables, but it doesn't seem.

What flags should we use instead? We don’t want to use MiniDumpWithFullMemory and begin to generate dumps of 600 MB +, but we will happily expand the dumps slightly exceeding 90 KB that we are currently receiving, if this means obtaining more useful data. Perhaps we should use MiniDumpWithDataSegments (globals) or ...?

+7
c ++ release minidump
source share
1 answer

WinDbg uses the following flags for .dump /ma :

 0:003> .dumpdebug ----- User Mini Dump Analysis MINIDUMP_HEADER: Version A793 (62F0) NumberOfStreams 13 Flags 41826 0002 MiniDumpWithFullMemory 0004 MiniDumpWithHandleData 0020 MiniDumpWithUnloadedModules 0800 MiniDumpWithFullMemoryInfo 1000 MiniDumpWithThreadInfo 40000 MiniDumpWithTokenInformation 

I suggest you replace MiniDumpWithFullMemory with MiniDumpWithIndirectlyReferencedMemory .

0
source share

All Articles