Crashrpt is amazing so we plan to use in in our project.
I notice that in the bin folder of crashrpt project, there are some MS DLLs such as mfc100u.dll/msvcp100.dll. However, normally we don't distribute these DLLs to users directly, instead we do this by including the Visual C++ Redistributable in our setup program, we use VS2010 to develop our application and set the project with /MD option.
In order to test how crashrpt work when these MS DLLs are stripped, I copy these files to a new folder (e.g. E:\test, all thoese mfc100u.dll/msvcp100.dll are skipped, all these executables are 32bit):
CrashRpt1400.dll
CrashSender1400.exe
crashrpt_lang.ini
dbghelp.dll
MFCDemo.exe
MFCDemo.pdb
I run the 32bit MFCDemo.exe on 64bit Windows 7, and then I use Process Explorer (procexp.exe, formerly from sysinternals and now from Microsoft) to detect exactly what DLLs are loaded into its space, turns out these DLLs are loaded:
C:\Windows\SysWOW64\mfc100u.dll
C:\Windows\SysWOW64\msvcp100.dll
Then I follow the steps to crash MFCDemo.exe and generate minidump file, when I open it with VS2010 I notice that the DLLs listed in Visual Studio are from different path:
C:\Windows\System32\mfc100u.dll
C:\Windows\System32\msvcp100.dll
When I start debugging this minidump file, the callstack are listed as below:
> MFCDemo.exe!CMFCDemoDoc::Serialize(CArchive & ar) Line 57 C++
mfc100u.dll!52ba32b0()
[Frames below may be incorrect and/or missing, no symbols loaded for mfc100u.dll]
mfc100u.dll!52ba2824()
However, if I copy those MS DLLs (like mfc100u.dll from the Bin folder of crashrpt project) and repeat the above steps, then the callstack are properly displayed.
So I wonder, is there a solutio to handle this problem for 32bit application that runs on 64bit OS? I mean, do we have to include MS DLLs in our setup?
Thanks!