Почему трассировка стека исключений равна нулю в MonoTouch 4, запущенном на устройстве?

#xamarin.ios

#xamarin.ios

Вопрос:

Я только что обновился до версии MT 4.0.1 с версии 3.2.6. Теперь кажется, что отчеты об исключениях больше не содержат трассировок стека при запуске на устройстве.

У меня есть обработчик исключений, прикрепленный к AppDomain.CurrentDomain.Необработанное исключение, которое я использую для сохранения отчета об исключении в файл. В симуляторе в режимах отладки и выпуска, UnhandledExceptionEventArgs.ExceptionObject.Трассировка стека установлена. На устройстве в обоих режимах отладки и выпуска это свойство равно нулю.

Я попытался проверить «Выдавать отладочную информацию» в разделе «Компилятор» параметров проекта. Я попытался добавить «—nosymbolstrip» в аргументы сборки MT. Я пробовал LLVM как включенным, так и отключенным.

Есть идеи? Мы не сможем выполнить обновление в App Store, пока не будем уверены, что все отчеты об исключениях, которые мы получаем, содержат необходимую диагностическую информацию.

Ответ №1:

Какую информацию содержит ExceptionObject.toString() предоставляет? Оно должно включать сообщение об ошибке и трассировку стека. Я знаю, что у меня это работает, потому что недавно я использовал это для отправки ошибки в Novell.

Кроме того, вы можете захотеть обернуть try-catch вокруг запуска вашего приложения в static void Main() , как AppDomain.Необработанное исключение предназначено для исключений вне потока.

Комментарии:

1. Исключение. toString () включает полную трассировку стека в симуляторе, в то время как эта информация отсутствует в toString () на устройстве. Конечно, тип исключения, сообщение об ошибке и целевой сайт являются полезными данными, но трассировка стека является наиболее важной и, к сожалению, отсутствует.

2. Эта информация по-прежнему отсутствует, если вы разместите try-catch вокруг своего static void Main() и просмотрите ее там?

Ответ №2:

Похоже, это исправлено в MonoTouch 4.0.4.1, хотя я не видел, чтобы это упоминалось в описании обновления. Возможно, кто-нибудь из Xamarin может подтвердить, что это было исправлено специально.

Для справки, на устройстве были повреждены трассировки стека в целом, а не только те, которые связаны с исключением. Раньше, если бы вы это делали new StackTrace() , его кадры были бы неполными.