My current work nowadays involves a lot of multi-threading application. And also a lot of simultaneous users. We need to serve them fast (as in milliseconds fast), that's why some of our apps and services uses threads to provide the data very fast and also do most of the things in parallel.
We had issues before where an application keeps on dying without any logs. This would be because of the threads dying even if we have exception handling. We can't seem to understand and the only clue we have is the event viewer saying something died.
So I kept on searching a solution and found it here : http://blog.functionalfun.net/2013/05/how-to-debug-silent-crashes-in-net.html. This is applicable from windows vista and up.
Just to recap what it says in this linked, we followed the procedure as shown below :
1. Create a key at HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\Windows Error Reporting\LocalDumps\[Your Application Exe Name]. In that key, create a string value called DumpFolder, and set it to the folder where you want dumps to be written. Then create a DWORD value called DumpType with a value of 2. Example shown below :
2. Once done, and your app crashes, it will create a *.dmp file onto the folder you specified. Get that file and open it on your visual studio. I find that you need to put the DMP file onto the folder where your application, DLL and PDB files are located.
3. You will see the screen below. Click on the Debug with Mixed and it will go to the line where the offending application stopped. Voila!, you know now which portion of the app made your application crash.