我在Android Studio(3.1.3)中遇到了一个问题,当(我假设是)外部库中抛出异常时,应用程序将挂起。这使得调试变得不可能,因为我从未看到异常是什么。它不会打印到Logcat、调试控制台中,并且不会在try-catch语句中捕获异常。
起初我以为这是因为代码在另一个线程上运行,但当它也在主线程上运行时,就会发生这种情况。
我还尝试重新启动emulator、android studio和我的电脑,但都没有起到作用。
它不会发生在所有的例外情况下(我通过尝试除以0来测试)
如果有帮助,则是引发异常的代码:
Gson gson = new GsonBuilder().registerTypeAdapter(User.class, new InterfaceAdapter()).create();
SharedPreferences sharedPreferences = context.getSharedPreferences(getFileName(context), ContextWrapper.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
try {
String value = gson.toJson(user); //this is where the program hangs
editor.putString(getKeyName(), value);
editor.apply();
} catch (Exception ex) {
ex.printStackTrace();
}
这基本上就是logcat在问题开始后的样子:
07-26 08:28:06.754 6211-6220/org。迈尔格。myapp I/zygote:进行完整代码缓存收集,代码=76KB,数据=76KB
07-26 08:28:06.756 6211-6220/org。迈尔格。myapp I/zygote:在代码缓存收集之后,代码=42KB,数据=44KB
07-26 08:28:14.867 6211-6224/org。迈尔格。myapp I/zygote:等待阻塞的GC调试器
07-26 08:28:14.883 6211-6224/org.myorg.myappI/zygote: WaitForGcTo完全阻塞16.146毫秒的原因调试器
07-26 08:28:15.201 6211-6228/org。迈尔格。myapp I/zygote:后台并发复制GC释放409390(7MB)AllocSpace对象,41(984KB)LOS对象,24%空闲,18MB/24MB,暂停692us总计101.606ms
07-26 08:28:15.519 6211-6228/org。迈尔格。myapp I/zygote:后台并发复制GC释放592391(10MB)AllocSpace对象,48(1428KB)LOS对象,18%空闲,26MB/32MB,暂停799us总计124.258ms
07-26 08:28:15.718 6211-6228/org。迈尔格。myapp I/zygote:后台并发复制GC释放668826(11MB)AllocSpace对象,47(1520KB)LOS对象,15%空闲,31MB/37MB,暂停1.041ms总计149.078ms
07-26 08:28:15.933 6211-6228/org.myorg.myappI/zygote:后台并发复制GC释放781317(13MB)AllocSpace对象,51(1836KB)LOS对象,13%自由,37MB/43MB,暂停1.114 ms总计169.812ms
07-26 08:28:16.172 6211-6228/org.myorg.myappI/zygote:后台并发复制GC释放871622(14MB)AllocSpace对象,52(2044KB)LOS对象,12%自由,43MB/49MB,暂停1.219ms总计192.129ms
07-26 08:28:16.4616211-6228/org。迈尔格。myapp I/zygote:后台并发复制GC释放985287(16MB)AllocSpace对象,55(2MB)LOS对象,10%空闲,49MB/55MB,暂停962us总计239.343ms
07-26 08:28:16.799 6211-6228/org。迈尔格。myapp I/zygote:后台并发复制GC释放1046427(17MB)AllocSpace对象,52(2MB)LOS对象,9%空闲,58MB/64MB,暂停1.088ms总计290.110ms
07-26 08:28:17.121 6211-6228/org。迈尔格。myapp I/zygote:后台并发复制GC释放1235281(20MB)AllocSpace对象,58(2MB)LOS对象,8%空闲,65MB/71MB,暂停924us总计281.931ms
07-26 08:28:17.512 6211-6228/org。迈尔格。myapp I/zygote:后台并发复制GC释放1305931(22MB)AllocSpace对象,58(2MB)LOS对象,7%空闲,76MB/82MB,暂停2.252ms总计347.833ms
07-26 08:28:17.946 6211-6228/org。迈尔格。myapp I/zygote:背景并发复制GC释放1545721(25MB)AllocSpace对象,62(3MB)LOS对象,6%空闲,86MB/92MB,暂停670us总计388.329ms
07-26 08:28:18.446 6211-6228/org.myorg.myappI/zygote:后台并发复制GC释放1689093(28MB)AllocSpace对象,64(3MB)LOS对象,5%自由,94MB/100MB,暂停811us总计447.255ms
07-26 08:28:18.9936211-6228/org。迈尔格。myapp I/zygote:后台并发复制GC释放1706872(28MB)AllocSpace对象,61(3MB)LOS对象,5%空闲,106MB/112MB,暂停1.647ms总计494.095ms
07-26 08:28:19.564 6211-6228/org。迈尔格。myapp I/zygote:后台并发复制GC释放1917145(31MB)AllocSpace对象,64(4MB)LOS对象,4%空闲,124MB/130MB,暂停1.588ms总计525.774ms
07-26 08:28:19.869 6211-6224/org。迈尔格。myapp I/zygote:等待阻塞的GC调试器
07-26 08:28:20.215 6211-6228/org。迈尔格。myapp I/zygote:后台并发复制GC释放2316750(38MB)AllocSpace对象,73(5MB)LOS对象,4%空闲,138MB/144MB,暂停675us总计594.107ms
07-26 08:28:20.215 6211-6224/org.myorg.myappI/zygote: WaitForGcTo完全阻塞345.610ms的原因调试器
07-26 08:28:20.921 6211-6228/org.myorg.myappI/zygote:后台并发复制GC释放2507776(41MB)AllocSpace对象,74(5MB)LOS对象,4%自由,136MB/142MB,暂停711us总计657.115ms
07-26 08:28:21.698 6211-6228/org。迈尔格。myapp I/zygote:后台并发复制GC释放1960643(32MB)AllocSpace对象,55(4MB)LOS对象,3%空闲,170MB/176MB,暂停2.113ms总计729.245ms
07-2608:28:22.5636211-6228/org。迈尔格。myapp I/zygote:后台并发复制GC释放3069424(50MB)AllocSpace对象,82(6MB)LOS对象,3%空闲,191MB/197MB,暂停2.610ms总计817.861ms
07-26 08:28:23.553 6211-6228/org.myorg.myappI/zygote:后台并发复制GC释放3358701(55MB)AllocSpace对象,84(7MB)LOS对象,3%自由,188MB/194MB,暂停2.265ms总计941.755ms
07-26 08:28:24.550 6211-6228/org.myorg.myappI/zygote:后台并发复制GC释放2638191(43MB)AllocSpace对象,63(5MB)LOS对象,2%自由,227MB/233MB,暂停687us总计939.390ms
07-26 08:28:24.869 6211-6224/org。迈尔格。myapp I/zygote:等待阻塞的GC调试器
转到你的logcat,右边会有一个微调器,可以选择如何过滤日志。选择“编辑筛选器配置”,然后键入程序包名称。这样你就可以追踪日志,它们在你的案例中消失了。
干杯
当我从EJB调用一个方法时,我遇到了一个奇怪的异常。EJB的方法只是参考BD并返回一个VO。当我从一个独立的客户机调用该方法时,所有这些都能很好地工作,但是当我从同一台服务器、从另一个EJB调用该方法时,它返回:org。天啊。科尔巴。未知:重新引发挂起的异常时发现意外异常:(.VOObject)vmcid:IBM次要代码:EA5已完成:可能 服务器是WebSphereApplicationServ
我有办法: 和每个内部事务的另一个bean: 当我第一次尝试保存时,我有20行DB。每次下一次保存,我得到+10行。名称具有约束。当我得到错误时,事务是提交而不是继续。每次保存后我都会等待98行。
如果在java中执行关闭挂钩期间引发了未捕获的异常,jvm是否会立即退出,而不运行其余已注册的关闭挂钩(如果有)?从javadocs: 未捕获的异常通过调用线程ThreadGroup对象的uncaughtException方法在关闭钩子中处理,就像在任何其他线程中一样。此方法的默认实现将异常的堆栈跟踪打印到System.err并终止线程;它不会导致虚拟机退出或停止。 似乎其他关机挂钩应该运行...
我正尝试在类的方法中使用(以支持拖放)。我想显示我拖动的文件的导入进度。然而,它并不起作用。我不明白问题是什么,或者是什么引起的。 例外情况:
当外部命令(如git)写入stderr时,PowerShell会生成NativeCommandError异常。我希望看到与标准UNIX/Linux系统类似的输出和stdout。这个脚本需要运行许多本机命令,如果可能的话,我更喜欢一个不给每个命令添加太多杂乱和维护的解决方案。 在Linux上,可以这样签出分支: 其中的微妙之处在于,最后一行是出于任何原因写入stderr的。但是,git的退出状态为零
你可以使用raise语句 引发 异常。你还得指明错误/异常的名称和伴随异常 触发的 异常对象。你可以引发的错误或异常应该分别是一个Error或Exception类的直接或间接导出类。 如何引发异常 例13.2 如何引发异常 #!/usr/bin/python # Filename: raising.py classShortInputException(Exception): '''A u