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());
}
Лучше, чем ничего, но не очень удовлетворительно.
Знаете ли вы, как распечатать полную обратную трассировку в журнале?
Спасибо.
Ответы
Ответ 1
try {
// code that might throw an exception
} catch (Exception e) {
Log.e("MYAPP", "exception", e);
}
Более подробно с дополнительной информацией
(Так как это самый старый вопрос по этому поводу.)
Методы журнала Android с тремя аргументами будут печатать трассировку стека для Exception
, которое предоставляется в качестве третьего параметра. Например
Log.d(String tag, String msg, Throwable tr)
где tr
- исключение.
Согласно этому комментарию, эти методы журнала "используют метод getStackTraceString()
... за кулисами", чтобы сделать это.
Ответ 2
Эта вспомогательная функция также хорошо работает, поскольку Exception также является Throwable.
try{
//bugtastic code here
}
catch (Exception e)
{
Log.e(TAG, "Exception: "+Log.getStackTraceString(e));
}
Ответ 3
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.
Ответ 4
public String getStackTrace(Exception e){
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
e.printStackTrace(pw);
return sw.toString();
}
Ответ 5
e.printStackTrace() печатает его мне. Я не думаю, что вы правильно управляете логарифмом. Не запускайте его в оболочке, просто запустите
/home/dan/android-sdk-linux_x86/tools/adb logcat
Ответ 6
Стандартный вывод и вывод ошибки по умолчанию направлены на /dev/null, так что все они потеряны. Если вы хотите записать этот вывод, вам необходимо следовать инструкциям "Просмотр stdout и stderr", показанным здесь
Ответ 7
try{
...
} catch (Exception e) {
Log.e(e.getClass().getName(), e.getMessage(), e.getCause());
}
Ответ 8
В контексте 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));
}