17

e.printStackTrace() 工作正常(即将我的堆栈跟踪打印到标准错误)但 Log.X 根本无法打印堆栈跟踪。

例如:

} catch (IOException e) {
    Log.e("Network", "Exception", e);
    e.printStackTrace();
}

输出:

08-31 03:46:21.992: W/Network(13238): Exception
08-31 03:46:22.092: W/System.err(13238): java.net.UnknownHostException: Unable to resolve host "...": No address associated with hostname
08-31 03:46:22.204: W/System.err(13238):    at java.net.InetAddress.lookupHostByName(InetAddress.java:394)
08-31 03:46:22.222: W/System.err(13238):    at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)
08-31 03:46:22.222: W/System.err(13238):    at java.net.InetAddress.getAllByName(InetAddress.java:214)
4

2 回答 2

39

结果是 Log.X 使用的 Android 的 Log.getStackTraceString 吞下了 UnknownHostException。:(

来自: http: //grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.2.2_r1/android/util/Log.java#Log.getStackTraceString%28java.lang。可投掷%29

public static String getStackTraceString(Throwable tr) {
    if (tr == null) {
        return "";
    }

    // This is to reduce the amount of log spew that apps do in the non-error
    // condition of the network being unavailable.
    Throwable t = tr;
    while (t != null) {
        if (t instanceof UnknownHostException) {
            return "";
        }
        t = t.getCause();
    }

    StringWriter sw = new StringWriter();
    PrintWriter pw = new PrintWriter(sw);
    tr.printStackTrace(pw);
    return sw.toString();
}

这一切都很好地减少了日志溢出,但甚至不告诉我我的异常是什么是糟糕的 joojoo!

于 2013-08-31T04:39:08.253 回答
0

我也有这种问题,并创建了一个 Xposed 模块来克服这个问题。有关安装说明,请参阅Xposed for Android 8+原始 Xposed 。后来我偶然发现了这个线程。

这是项目:FullStackTrace

还有一个用于下载发布版本的 apk。

您的设备必须植根才能使用 Xposed。我在这里使用了 Magisk

于 2019-09-29T22:33:07.347 回答