Android - 打印完整异常回溯以记录

时间:2010-12-03 00:16:53

标签: android

我有一个抛出异常的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());
}

总比没有好,但不是很满意。

您知道如何将完整的回溯打印到日志中吗?

感谢。

10 个答案:

答案 0 :(得分:155)

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

答案 1 :(得分:44)

这个辅助函数也很好用,因为 Exception 也是 Throwable

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

答案 2 :(得分:8)

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说的话。

答案 3 :(得分:3)

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

答案 4 :(得分:2)

e.printStackTrace()将它打印给我。我认为你没有正确运行logcat。不要在shell中运行它,只需运行

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

答案 5 :(得分:1)

标准输出和错误输出默认指向/ dev / null,因此全部丢失。如果要记录此输出,则需要按照here

中显示的“查看标准输出和标准显示”的说明进行操作

答案 6 :(得分:1)

try{
            ...
} catch (Exception e) {
     Log.e(e.getClass().getName(), e.getMessage(), e.getCause());
}

答案 7 :(得分:0)

在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));
}

答案 8 :(得分:0)

科特琳解决方案:

您可以使用属于getStackTraceString()类的辅助功能android.util.Log在控制台上打印整个错误消息。

示例:

try { 
 
   // your code here
    
} catch (e: Exception) {

     Log.e("TAG", "Exception occurred, stack trace: " + e.getStackTraceString());

}

答案 9 :(得分:0)

Kotlin 扩展。返回此 throwable 及其堆栈跟踪的详细描述。

e.stackTraceToString()