Android – 打印完整的exception回溯logging
我有一个try / catch块引发exception,我希望看到关于Android设备日志中的exception的信息。
我从我的开发计算机中用这个命令读取移动设备的日志:
/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()); }
总比没有好,但不是很令人满意。
你知道如何打印完整的回溯到日志?
谢谢。
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()将其打印给我。 我不认为你正在运行logcat。 不要在shell中运行它,只要运行
/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,因此全部丢失。 如果你想logging这个输出,那么你需要按照这里显示的“查看stdout和stderr”的指示
在Android的上下文中,我不得不将exception转换为string:
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()); }