android - 没有堆栈跟踪的应用程序崩溃

标签 android android-studio

前言 我已经更改了标题。很难理解为什么在调试时,有时未捕获的异常会向 Logcat 打印“致命异常”,而有时却不会。

当我到达 client1.getInputStream() 行时,下面的简化示例崩溃了。 Logcat 内部没有关于出错的堆栈跟踪或其他指示。我正在运行 Android Studio 3.0.0beta4。

  • 为什么会崩溃? (更新 - 崩溃是由于 SecurityException)
  • 为什么 Logcat 不显示堆栈跟踪或 其他错误?

更新 好吧,我知道它为什么会崩溃了。我添加了 catch(Exception ex) {...} 并发现实际上抛出了一个异常,因为我忘了测试它。愚蠢的错误,我没有在 list 中包含 INTERNET 权限。

所以,我仍然想知道为什么我没有得到未处理异常的错误指示。该应用程序悄悄消失了。

编辑一位评论者说

In java, unhandled exceptions are not printed

这是我强制执行未处理的 NullPointerException 时的 logcat 消息

FATAL EXCEPTION: Thread-6729
           Process: com.example.myapplication, PID: 30824
           java.lang.NullPointerException: Attempt to invoke virtual method 'java.io.InputStream java.net.URLConnection.getInputStream()' on a null object reference
           at com.example.myapplication.MainActivity.GetDataAsyncFromPlaystore(MainActivity.java:79)
           at com.example.myapplication.MainActivity$1$1.run(MainActivity.java:42)
           at java.lang.Thread.run(Thread.java:818)

那么,为什么不考虑 SecurityException?

Edit2 只是为了让事情更困惑,我发现当我在异常点之前设置一个断点时,然后单步执行代码并跨过违规行(导致SecurityException),应用程序突然终止,没有任何迹象表明原因。但是,如果我在到达有问题的行之前按 F9,实际上我会在 Logcat 中记录一条“致命异常”消息。 (因此,我在问题中添加了“android-studio”标签。)

所以,同样的问题,措辞略有不同:为什么在以一种方式进行调试时异常会打印“致命异常”消息,而另一种方式则不会?

(简化的)代码

public void GetDataFromWebsite()
{
    Uri queryUri = Uri.parse("https://play.google.com/store/search?q=Planning&c=apps");
    try {
        URL queryUrl = new URL(queryUri.toString());
        URLConnection client1 = queryUrl.openConnection();
        InputStream in = client1.getInputStream();
        Log.d("Test", "Okay");
    } catch (MalformedURLException muex) {
        Log.e("Test", "Malformed Url", muex);
    } catch (IOException ioex) {
        Log.e("Test", "IO Error", ioex);
    // } catch(Exception ex) {
    //    Log.e("Test","Other Exception", ex);
    }
}

注意:

最佳答案

您只是捕获了 MalformedURLExceptionIOException。所以你不会得到其他异常(exception)。 捕获 Exception 你会得到一个跟踪。

Android 日志 cat 中未打印未处理的异常。您可以通过 UncaughtExceptionHandler 打印 UnHandled 异常。这是一个类似实现 UncaughtExceptionHandler 的例子:Logging unhandled exceptions in Android Activity

NullpointerExceptionSecurityException 之间没有相关性。它如何被 SecurityException 捕获。

关于android - 没有堆栈跟踪的应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46100617/

相关文章:

android - 运动场景错误。无法使用动画编辑器

android - 将 Android Studio 2.0 模拟器与 Google 服务一起使用

java - 在 android studio 中生成签名的 apk 时未找到类型 `libcore.io.Memory`

javascript - 如何读取通过 cordova 文件插件写入的对象?

java - 使用泛型实现接口(interface),两种方法具有相同的删除功能

java - 解析没有键的Json数组

android - 尽管数据显示在浏览器中,但我无法将数据从服务器检索到 android studio

java - 我的 Android 应用程序中的\\p{Punct} 行为

java - Android 设备到设备推送通知

java - 如何将 Date = new Date 转换为时间,然后将时间转换为长值