2016-11-22 2 views
0

Я работаю над приложением с Xamarin (в Visual Studio 2015) для Android.Как отладить приложение сбоя

Когда я запускаю свое приложение в режиме отладки, иногда приложение останавливается с сообщением «MyApplication остановлено».

Я добавил этот код в MainActivity:

// Catch Exception 
AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException; 
AndroidEnvironment.UnhandledExceptionRaiser += AndroidEnvironment_UnhandledExceptionRaiser; 

Я добавил точки останова добавить журнал в обеих функциях, но я не вижу никаких следов в журнале и контрольные точки не будут достигнуты.

Как я могу отладить эту проблему?

ответ

1

Вам необходимо отладить ваше приложение через постоянный регистратор, то есть adb logcat. Печально регистрировать обработчик необработанных исключений не гарантирует, что он будет «пойманным», поскольку он, возможно, никогда не достигнет этой точки. Поэтому для этих типов проблем вам понадобится сочетание adb logcat и Console.WriteLine. Примите во внимание следующее примечание, когда вы хотите посмотреть, что происходит внутри этого обработчика, но также используйте adb logcat, чтобы увидеть причину аварии в первую очередь.

/// <summary> 
/// When app-wide unhandled exceptions are hit, this will handle them. Be aware however, that typically 
/// android will be destroying the process, so there's not a lot you can do on the android side of things, 
/// but your xamarin code should still be able to work. so if you have a custom err logging manager or 
/// something, you can call that here. You _won't_ be able to call Android.Util.Log, because Dalvik 
/// will destroy the java side of the process. 
/// </summary> 

protected void HandleUnhandledException (object sender, UnhandledExceptionEventArgs args) 
{ 
    Exception e = (Exception) args.ExceptionObject; 

    // log won't be available, because dalvik is destroying the process 
    //Log.Debug (logTag, "MyHandler caught : " + e.Message); 
    // instead, your err handling code shoudl be run: 
    Console.WriteLine ("========= MyHandler caught : " + e.Message); 
} 

https://github.com/xamarin/monodroid-samples/blob/fb9d4ed266bdf68bb1f9fa9933130b285712ec82/AdvancedAppLifecycleDemos/HandlingCrashes/App.cs

1

Попробуйте: отключено «Использовать совместное выполнение» в настройках Android. Если это не помогло, попробуйте отключить «Использовать быстрое деирование».

Смежные вопросы