In my application, I use the MiniDumpWriteDump function (see dbghelp.dll) to write the dump file if it crashes when the application crashes.
I also use a symbol server to store all of my executables and pdb files, so whenever a client sends me a crash dump file, the debugger automatically selects the correct version of the executable and debug information.
I also store the Windows DLL (ntdll.dll, kernel32.dll, ...) and their debug information on the character server (using SymChk). Debug information is retrieved from the Microsoft public symbol server.
In most cases, this works fine, except when:
- client crashes in one of the windows dll files
- and the client uses a DLL that I did not put in the symbol server
This is due to the fact that it is completely unsuitable to store every taste of every Windows DLL on the Symbol server (especially with weekly patches).
So, if the client crashed, say, version 5.2.123.456 from NTDLL.DLL, and I did not put this exact version of the DLL on my Symbol server, then I was stuck. Even Microsoft's public symbol server does not help, as it provides debugging information, not the DLL itself.
My current solution is to ask the client about his DLL, but this is not always easy. Therefore, I am looking for the best solution.
Is there a way to get a debugger showing the correct call stack, or download debugging information for a specific DLL, even if you don't have the exact version of the DLL?
Alternatively, is there a way to get all versions of all (or important) Windows DLLs (from Microsoft)?
EDIT:
At the same time, I found a very simple way to solve this problem. Using the ModuleRescue utility (see http://www.debuginfo.com/tools/modulerescue.html ) you can create a dummy DLL from the minidump file. Using these dummy DLLs, the debugger is satisfied and correctly downloads debug symbols from Microsoft servers.