Я пытаюсь создать минимальный мини-дамп, используя MiniDumpWriteDump, где я могу задним числом прикреплять символы с помощью pdb. В настоящее время это работает с использованием MiniDumpWithFullMemory, но создает очень большой файл дампа.
Создание дампа с помощью MiniDumpNormal производит небольшой файл и дает трассировку стека со смещениями, но я не могу получить Visual Studio или WinDbg для загрузки символов. Визуальная студия просто говорит мне, что
Двоичный файл не был собран с отладочной информацией
WinDbg говорит мне:
ОШИБКА: файл символов не найден. По умолчанию для экспорта символов
для app.exe.
Я пробовал несколько комбинаций флагов, но не могу загрузить символы без использования MiniDumpWithFullMemory. Каков набор флагов для генерации наименьшего возможного дампа, который может разрешать символы для трассировки стека?
Исполняемый файл был собран с отладочной информацией (/ Zi / DEBUG), присоединение отладчика к запущенному процессу загружает символы, присоединение отладчика к аварийному процессу (при запуске WER) загружает символы, а генерация дампа с помощью MiniDumpWithFullMemory также загружает символы, но другие типы дампа не загружают символы.
Наиболее запутанной частью этой проблемы было то, как все отладки работали правильно, за исключением уменьшенных мини-дампов. Проверка исполняемого файла выявила проблему:
symchk app.exe / v
свалка / заголовки app.exe | grep pdb
Показано, что в exe нет информации о pdb. При проверке моей системы сборки я обнаружил дополнительный шаг сборки, который встраивал манифест, используя:
MT.exe -manifest C: \ app.exe.manifest -outputresource: C: \ app.exe; 1
Что и привело к тому, что информация pdb была удалена.
Удаление этого шага сборки сохраняет отладочную информацию и позволяет загружать символы из дампа MiniDumpNormal.
Других решений пока нет …