На самом деле проблема не в том, чтобы заставить работать отчеты о сбоях.Это довольно тривиально с библиотечными функциями DbgHelp и наиболее заметно там MiniDumpWriteDump
.Помните, однако, что нужно распространять библиотеку DbgHelp на старых системах и соблюдать требования к версиям для функций, которые вы собираетесь вызывать - более новые версии Windows поставляются по крайней мере с некоторыми версиями этой библиотеки.
Ваша проблема с использованиемкомпилятор не-MS (проблема также существует с Embarcadero, ранее Borland, продуктами, например, или Watcom) в том, что созданные символы отладки не имеют смысла для библиотеки DbgHelp, которая стандартное средство для отладки в Windows.Формат PDB в значительной степени недокументирован (для некоторых подсказок ищите термины: Sven Schreiber PDB ), а библиотеки, используемые для создания , они не являются «публичными» в том же смысле, что и DbgHelpбиблиотека - последняя может использоваться только для чтения / анализа созданных отладочных символов.Они являются частью продуктов Visual Studio и обычно называются как mspdbXY.dll (где XY - десятичные цифры).
Итак, если вы хотите создавать отчеты об ошибках, я настоятельно рекомендую вместо того, чтобы сосредоточиться на «компиляторе»проблемы ", сосредоточиться на проблемах отладчика.Вот общие указания, по которым вы можете пойти:
- Используйте отладчик, который понимает ваш конкретный формат отладки (GDB для DWARF в MinGW, IIRC)
- Используйте отладчик, который понимает несколькоформаты (IDA приходит на ум и имеет и другие преимущества;))
- Напишите расширение для чего-то вроде WinDbg, чтобы понять смысл ваших символов отладки (DWARF) или, в более общем смысле,
.map
файлов (яПомните, что такие расширения были написаны несколько лет назад для файлов Borland .map
) - Изучите язык ассемблера и используйте доступные инструменты (WinDbg или, в более общем случае, библиотеку DbgHelp) без символов (вероятно,слишком крутая кривая обучения, если вы ее еще не знаете)
В качестве расширения до 4 вы также можете позволить GCC создавать файлы .S
(сборка) во время компиляции для перекрестной ссылки на исходный код и сбойdump при работе без поддержки символов.
Учитывая, что я предпочитаю GDB на unixoid платформах, но WinDbg и другие отладочныеПо поводу Windows, я не могу точно сказать, есть ли поддержка фактического формата аварийного дампа (созданного с помощью MiniDumpWriteDump
) в GDB в Windows, поэтому я не уверен, какой формат может ожидать GDB в этом случае.
Кстати: если вы используете Windows XP или выше и можете полагаться на этот факт, используйте AddVectoredExceptionHandler
вместо SetUnhandledExceptionFilter
для подготовки записи аварийного дампа.