I have a minidump file from a crashing application on windows system at a customer.
We like to know:
- Which application crashed
- What function threw the exception
- Line number if available (Just for early crash envestigation)
What I'm trying to prevent is to setup a complete environment just to get a function (environment with dll and PDB is several gigabytes I don't want to copy around).
Is it possible to just have the minidump and get the function using scripting/tooling?
If I open the dump with VS2017
the callstack shows KERNELBASE.DLL
and a enter code here
DLL of us. If I load the symbols of that DLL+PDB
I see the function name.
Now I want to automate that, how do I know which DLL/PDB
is required beforehand?
So I tried with cdb
cdb.exe -y SRVc:\symbolshttp://msdl.microsoft.com/download/symbols -z myDmp.dmp -c ".lines; !analyze -v ; q"
And it spits out a lot of info, and at the end it shows MODULE_NAME
which is the failing DLL
. (No actual function name)
MODULE_NAME: MyDLL
FAILURE_BUCKET_ID: APPLICATION_FAULT_e1000003_MyDLL.dll!Unknown
If I put the MyDLL.DLL
and MyDLL.PDB
in the same folder as the minidump and rerun the command it shows:
MODULE_NAME: MyDLL
FAILURE_BUCKET_ID: APPLICATION_FAULT_e1000003_MyDLL.dll!MyFancyClass::MyCrashingFunction
FAULTING_SOURCE_LINE: c:\somepath.cpp
FAULTING_SOURCE_LINE_NUMBER: 123
Is this the way to go? As in,
- parse the output and find module_name
- put DLL and PDB in same folder
- rerun in the hope to get more information?
Do I always get the correct crash? Because without dll/dbg initially I also see a
WARNING: Stack unwind information not available. Following frames may be wrong.