Android – печать полного исключения backtrace для журнала

У меня есть блок try / catch, который генерирует исключение, и я хотел бы видеть информацию об исключении в журнале устройств Android.

Я прочитал журнал мобильного устройства с помощью этой команды с моего компьютера разработки:

/home/dan/android-sdk-linux_x86/tools/adb shell logcat 

Я попробовал это первым:

 try { // code buggy code } catch (Exception e) { e.printStackTrace(); } 

Но это ничего не печатает в журнале. Жаль, потому что это очень помогло бы.

Лучшее, что я достиг:

 try { // code buggy code } catch (Exception e) { Log.e("MYAPP", "exception: " + e.getMessage()); Log.e("MYAPP", "exception: " + e.toString()); } 

Лучше, чем ничего, но не очень удовлетворительно.

Вы знаете, как распечатать полную обратную трассировку в журнале?

Благодарю.

Solutions Collecting From Web of "Android – печать полного исключения backtrace для журнала"

 try { // code that might throw an exception } catch (Exception e) { Log.e("MYAPP", "exception", e); } 

Эта вспомогательная функция также хорошо работает, поскольку Exception также является Throwable .

  try{ //bugtastic code here } catch (Exception e) { Log.e(TAG, "Exception: "+Log.getStackTraceString(e)); } 
 catch (Exception e) { ByteArrayOutputStream baos = new ByteArrayOutputStream(); PrintStream stream = new PrintStream( baos ); e.printStackTrace(stream); stream.flush(); Log.e("MYAPP", new String( baos.toByteArray() ); } 

Или … я знаю … что сказал EboMike.

E.printStackTrace () печатает его мне. Я не думаю, что вы правильно управляете логарифмом. Не запускайте его в оболочке, просто запустите

/home/dan/android-sdk-linux_x86/tools/adb logcat

 public String getStackTrace(Exception e){ StringWriter sw = new StringWriter(); PrintWriter pw = new PrintWriter(sw); e.printStackTrace(pw); return sw.toString(); } 

Стандартный вывод и вывод ошибки по умолчанию направлены на / dev / null, так что все они потеряны. Если вы хотите зарегистрировать этот вывод, вам необходимо следовать инструкциям «Просмотр stdout и stderr», показанным здесь

В контексте Android я должен был передать исключение в строку:

 try { url = new URL(REGISTRATION_PATH); urlConnection = (HttpURLConnection) url.openConnection(); } catch(MalformedURLException e) { Log.i("MALFORMED URL", String.valueOf(e)); } catch(IOException e) { Log.i("IOException", String.valueOf(e)); } 
 try{ ... } catch (Exception e) { Log.e(e.getClass().getName(), e.getMessage(), e.getCause()); }