Я хотел бы знать обо всех сбоях моего приложения «в дикой природе». Мы можем легко перехватывать управляемые исключения, используя AppDomain.CurrentDomain.UnhandledException
.
Время от времени мы получаем сбои в неуправляемом коде (либо из-за нашего собственного взаимодействия с собственными библиотеками, либо иногда из-за неправильного использования monomac или проблем с самим monomac). Я хотел бы знать, когда они происходят, а также.
Я связал структуру plcrashreporter и добавил ее в свое приложение. Я прочитал обсуждение использования отчетов о сбоях с Xamarin.iOS
приложениями и реализовал < href="https://stackoverflow.com/questions/14499334/how-to-prevent-ios-crash-reporters-from-crashing-monotouch-apps/">обходной путь.
Пока все хорошо — я могу использовать отчет о сбоях, и мое приложение работает нормально. Тем не менее, я, кажется, ограничен в том, какие сигналы на самом деле ловятся.
Например, SIGILL
и SIGABRT
оба попадают в ловушку репортера о сбое. Отчет о сбое записывается на диск и может быть прочитан при следующем запуске приложения.
Однако SIGSEGV
и SIGBUS
не попадаются. Вместо этого я получаю трассировку стека, записанную в консоль вместе с:
=================================================================
Got a SIGSEGV while executing native code. This usually indicates
a fatal error in the mono runtime or one of the native libraries
used by your application.
=================================================================
Так что похоже, что ситуация на Mac не совсем такая, как на iOS. Обходной путь позволяет запускать отчет о сбоях, но Mono, похоже, не вызывает SIGABRT, когда получает SIGSEGV из неуправляемого кода.
Есть идеи?