Я не могу проанализировать трассировку стека моего самостоятельно созданного файла мини-дампов, когда исключение произошло во внешнем исходном коде.
Трассировка стека
Трассировка стека, которая выглядит следующим образом:
[Frames may be missing, no binary loaded for ForeignLib1.dll] Annotated Frame
> ForeignLib1.dll!00000000454fc028 Unknown No symbols loaded.
Но должно выглядеть так:
ForeignLib1.dll!00000000454d1fe8 Unknown No symbols loaded.
> MyDll.dll!get_modeldoc C++ Symbols loaded.
...(about 75 further Entries)
ForeignExecutable.exe!000000014000f973 Unknown No symbols loaded.
kernel32.dll!00007ffbae331fe4 Unknown Non-user code. Symbol loading disabled by Include/Exclude setting.
ntdll.dll!00007ffbaf07f061 Unknown Non-user code. Symbol loading disabled by Include/Exclude setting.
Мое приложение - это DLL, которая загружается во внешний исполняемый файл.Я не могу получить PDB-файл этого исполняемого файла, поэтому я не могу загрузить символы библиотеки ForeignLib1.dll ...
Minidump
Я создал Minidump со следующимФлаги:
MINIDUMP_TYPE mdt = (MINIDUMP_TYPE)(
MiniDumpWithDataSegs |
MiniDumpWithHandleData |
MiniDumpWithFullMemoryInfo |
MiniDumpWithThreadInfo |
MiniDumpWithUnloadedModules |
MiniDumpWithCodeSegs
);
И CallbackRoutine включает в себя следующие типы:
IncludeModuleCallback
IncludeThreadCallback
ModuleCallback //(MyDll.dll and all ForeignLib-Dlls)
ThreadCallback
ThreadExCallback
Файл DMP создается с помощью MiniDumpWriteDump (...)
// generate the crash dump
BOOL result = MiniDumpWriteDump( hProc, procID, hFile,
mdt, sehPtr, NULL, &mci );
Пример
Когда в моем исходном коде возникает исключение, я могу проанализировать трассировку стека, загрузив мой PDB-файл:
//MySource.cpp
int a = 0;
int b = 5 / a; // Exception, but Stack Trace can be analysed in DMP-File.
Но когда исключение возникает в чужом источнике,код, который вызывается моим исходным кодом, я вижу только иностранную dll в трассировке стека:
//MySource2.cpp
foreignModul->EnumDocuments2( nullptr ); // Exception, Stack Trace can't be analysed in DMP-File!!
Вопрос
Как я могу записать DMP-файл с правильнымStack Trace или как я могу проанализировать Stack Trace, когда исключение произошло во внешнем исходном коде?