当前位置: 首页 > 知识库问答 >
问题:

应用程序崩溃,没有堆栈跟踪

宰父远
2023-03-14

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

下面的简化示例在我到达 line client1.getInputStream() 时崩溃了。Logcat 内部没有堆栈跟踪或其他指示,说明出了什么问题。我运行的是 Android Studio 3.0.0beta4。

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

更新好了,我知道它为什么崩溃了。我添加了< code>catch(Exception ex) {...}并发现实际上抛出了一个异常,因为我忘记测试它了。愚蠢的错误,我没有在清单中包括互联网权限。

因此,我仍然想知道为什么我没有得到unhandle异常的错误指示。该应用程序只是悄悄地消失了。

编辑一位评论者说

在java中,不打印未处理的异常

这是当我强制执行未处理的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);
    }
}

注意:

共有1个答案

孟均
2023-03-14

您只是在捕捉< code > malformedurexception 和< code>IOException。所以你不会得到其他的异常。你将得到一个跟踪。

UnHandled异常未打印在android log cat中。您可以通过UncaughtExceptionHandler打印UnHandled异常。这是一个实现UncaughtExceptionHandler的类似方法:在Android活动中记录未处理的异常

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

 类似资料:
  • 我编写了一个Java应用程序,它使用JNI调用自定义的本机库。这个库工作得很好,我们可以通过它来处理小数据数组。但是,较大的数据数组会导致致命错误(EXCEPTION_STACK_OVERFLOW)。应用程序的核心转储显示了违规函数_chkstk。显然,当函数中有多页局部变量时,编译器会调用_chkstk。 通过快速搜索,我找到了Oracle的网站,该网站详细描述了4.1.3堆栈溢出导致的崩溃,并

  • 在我们的日志文件中,我们发现以下内容: 只有这一行,没有异常堆栈跟踪。 出现此异常的try块正在执行使用javassist创建的动态生成的Java字节码。 我想知道两件事: : null 丢失的堆栈跟踪,尽管在块内使用调用日志挂钩,这通常会导致完整的堆栈跟踪被打印在日志文件中。 我的问题: > 什么样的代码会导致日志输出“java.lang.ArrayIndexOutOfBoundsExcepti

  • 问题内容: 当我尝试访问Flask应用程序时,该应用程序崩溃了。 这类似于this或this。但是,我的设置似乎正确。 flask.cli.NoAppException:提供的文件/路径(服务器)似乎不存在。请确认路径正确。如果应用不在PYTHONPATH上,请确保扩展名为.py 我的环境变量设置正确。 我的服务器文件是y目录中没有任何文件。 我不记得对代码进行任何特殊更改。该错误可能来自哪里?

  • 在以前的代码上,谁医生帮了我 现在,android应用程序在我的手机上运行时崩溃了,这是错误日志 第一个问题是在我用相机扫描二维码后,它不能显示在二维码的结果进入 第二个问题是,我从存储器中选择了一个QRcode图像,然后点击确认,它崩溃了 下面是我认为的问题 类型不匹配:推断的类型是Uri?但乌里是意料之中的 冗余SAM构造函数 'onRequestPermissionsResult(Int,数

  • 问题内容: 这可能是一个非常幼稚的问题。 我曾经相信Java 中的a 总是 包含堆栈跟踪。这是正确的吗? 现在看起来我捕获了 没有 堆栈跟踪的异常。是否有意义?是否 可以 在没有堆栈跟踪的情况下捕获异常? 问题答案: 无需堆栈跟踪就可以捕获Java中的Throwable对象: 构造一个具有指定详细消息,原因,启用或禁用原因,启用或禁用 可写堆栈跟踪 的新throwable 。 填写执行堆栈跟踪。此

  • 现在看来,我在没有堆栈跟踪的情况下捕获异常。有道理吗?是否有可能在没有堆栈跟踪的情况下捕获异常?