2010-12-03 5 views
77

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

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

/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()); 
} 

Лучше, чем ничего, но не очень приятно.

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

Спасибо.

ответ

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

Кроме того, My style: Log.e (e.getClass(). GetName(), e.getMessage(), e); – Vikas 2011-01-20 09:54:29

+22

Остерегайтесь использования e.getMessage() - getMessage() может возвращать значение null в зависимости от типа исключения, которое само по себе вызывает исключение, поскольку значение null не поддерживается в качестве параметра сообщения в методах журнала. См. [Здесь] (http://developer.android.com/reference/java/lang/Throwable.html#getMessage%28%29) – Uniqe 2011-06-08 09:52:43

+0

Кроме того, имеет смысл описать, какой код вызвал это исключение во втором параметр. В любом случае сообщение уже включено в выход. – EboMike 2014-03-16 00:40:49

7
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.

2

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

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

33

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

try{ 
     //bugtastic code here 
    } 
    catch (Exception e) 
    { 
     Log.e(TAG, "Exception: "+Log.getStackTraceString(e)); 
    } 
1

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

2
public String getStackTrace(Exception e){ 
    StringWriter sw = new StringWriter(); 
    PrintWriter pw = new PrintWriter(sw); 
    e.printStackTrace(pw); 
    return sw.toString(); 
} 
0
try{ 
      ... 
} catch (Exception e) { 
    Log.e(e.getClass().getName(), e.getMessage(), e.getCause()); 
} 
0

В контексте 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)); 
} 
Смежные вопросы