Подтвердить что ты не робот

Отчеты о сбоях для приложений MinGW

У меня есть приложение С++, составленное с помощью MinGW, для которого я получаю жалобы от клиентов. Таким образом, помимо значительного вхождения в детали, которые могут быть сбой (перед выпуском новой версии), я искал репортера сбоев, который поможет мне узнать трассировку стека и любую другую полезную информацию для отладки всякий раз, когда возникает ошибка.

Существует ли какой-либо такой инструмент, совместимый с приложениями MinGW? (похоже, существует тесная связь между компилятором и стратегией отчетов о сбоях, поэтому вопрос).

Есть ли какие-либо инструменты Windows, которые могут мне помочь? Приложение запускается в основном на компьютерах под управлением Windows XP.

Возможность писать информацию в файл достаточно для моих целей. Затем я могу попросить моего клиента выслать мне информацию.

Я смотрел google-breakpad и SetUnhandledExceptionFilter, но я до сих пор не знаю, насколько они будут полезны. Другие утилиты отчетов об авариях, такие как crashrpt, предназначены для Visual С++, поэтому я думаю, что попытка их использования с MinGW не делает много смысла.

EDIT: некоторые полезные ссылки по теме

4b9b3361

Ответ 1

На самом деле проблема заключается не столько в том, чтобы отчеты о сбоях работали. Это довольно тривиально с библиотечными функциями 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 (сборка) во время компиляции, чтобы перекрестно ссылаться на исходный код и аварийный дамп при работе без поддержки символов.

Учитывая, что я предпочитаю GDB на платформах unixoid, но WinDbg и другие отладчики в Windows, я не могу сказать, есть ли поддержка фактического формата дампа сбоя (созданного с помощью MiniDumpWriteDump) в GDB в Windows, поэтому я не уверен, какой формат может ожидать от GDB в этом случае.

BTW: если вы используете Windows XP или выше и можете положиться на этот факт, используйте AddVectoredExceptionHandler вместо SetUnhandledExceptionFilter, чтобы подготовить запись дампа сбоя.