I have a application which has been gone into hang state. this application is really a combination of three different exes. UI.exe, core.exe, core.dll. all of these are basically built on VC++. so when i look into the application logs i can see ui.exe is stopped somewhere. So I have taken the Mini dump with full application data via Task Manager->processes->select the ui.exe and core.exe right click it and "Create dump file". I have some 150MB + data present in the ui.exe dmp file. how to analyze it?
So far I can able to load the dump file with all its necessary pdb files (application + System) and successfully loaded the values. I can able to see the application is running but not responding to the core.exe request.
Now I really looking for the application data which is in heap and stack of the ui.exe and core.exe with that i can able to check where the data is getting piled up. what variable / array is eating up the value. can any one tel me a way for this?
There are several options, depending on the type of hang you experience. One is a low CPU hang, which could be a deadlock. The other is a high CPU hang, which could be an endless loop. Debugging a deadlock is typically easier, since you get good and always the same callstacks. Debugging a high CPU hang is harder, because there may be different callstacks, depending on the time when you took the dump. You'll need several dumps - or better use a profiler.
To answer your questions:
How to analyze it?
There are three main choices
!analyze -v
as your first command. But in any case tryCan any one tell me a way for this? [finding out where the data is getting piled up]
I cannot clearly see how a big amount of data is related to a hung application. The data is on the stack or on the heap, depending on how you implemented your application. Note that in C++ there is no clear mapping between object types and memory as there is in .NET. You cannot simply type a command like Show me all objects of type Xyz.
In Visual Studio you could be lucky for local variables etc., since they might be resolved. In WinDbg you'd use some of the !heap
commands and probably configure some GFlag settings to keep track of memory allocations.