Android Studio IDE:打破异常


138

似乎我的Android Studio不想默认中断任何异常。在“任何异常”上启用中断将开始在实际的JDE库中中断。有什么方法可以迫使它仅在我的代码中的异常情况下中断?

来自Visual Studio Universe,在此处查找默认的VS调试行为。

Answers:


206

打破所有被捕获或未捕获的异常:

  1. 通过Run-> View Breakpoints打开Breakpoints窗口。
  2. 出现“断点”对话框。在左窗格中,滚动到底部。在Java异常断点下选择任何异常
  3. 在选择“ 任何例外”的情况下,在右窗格中进行如下配置:
    • 挂起:已检查
    • 全部:已选择
    • 健康)状况: !(this instanceof java.lang.ClassNotFoundException)
    • 通知:已选择捕获异常未捕获异常

断点对话框

  1. 定义用于指定调试器依赖的库名称空间的过滤器:选中“ 类过滤器”复选框以启用类过滤(如@Scott Barta所述)。然后单击...(省略号)按钮以打开“类过滤器”对话框。通过单击添加图案(添加模式)按钮指定类名称空间模式。输入:
    • com.myapp.* (将其替换为应用程序的名称空间前缀)
    • java.* (注意:按照OP的问题,请将其保留为不会破坏Java库)
    • android.* (如上所述,省去只调试自己的应用代码)
    • 根据需要添加任何其他名称空间(例如,第三方库)

类过滤器

  1. OK,然后关闭Breakpoints对话框。

6
@AndroidDev这不是最好的界面,尤其是在使用Visual Studio IDE时。类过滤器是为了防止各种低级错误更频繁地停止应用程序(尤其是在应用程序初始化期间)。例如,请按照上述步骤操作,但不使用类过滤器,然后以调试模式启动应用程序,然后看看会发生什么。
CJBS 2015年

6
@AndroidDev:我认为这确实有意义。默认情况下,它在所有异常情况下中断。您不必设置条件和过滤器。但是,OP 确实特别要求过滤异常(他自己的代码中的异常)。
Mooing Duck 2015年

4
作为xcode / iOS开发人员和android-n00b,我不知道为了触发任何断点,在Android Studio中,您无法单击类似播放(三角形)的图标来启动应用程序。您必须通过单击右侧它旁边的类似bug的图标来启动该应用程序。
xaphod

@xaphod另一种方法是在发布模式下运行(按播放按钮),然后在应用启动后,连接调试器(通过按下带有错误的设备-图标右下方带有绿色错误的纵向矩形),然后选择要调试的过程。如果不调试任何应用程序启动代码,这将更快。请参阅:developer.android.com/tools/debugging/...
CJBS

如果您使用的是junit(在单元测试时进行调试),则可能要添加类过滤器org.junit.*
Thomas Vincent

34

如果打开“断点”窗口,它将为您提供很多选择,让其有条件地断开或不断开。您要查找的是此处的“类过滤器”-您可以使用例如Java包路径来指定通配符表达式,并且该通配符表达式仅会因匹配类生成的异常而中断。


4
对于正在寻找“断点”窗口的任何人,可以在菜单中运行->查看断点。
Patrick

2
我正在尝试此操作,但无法正常工作。类过滤器应该是什么?可以举一些例子吗?
巴特·弗里德里希斯

1
我在同一条船上-类过滤器似乎对我不起作用。我已经尝试过com.mycompany。*,但是没有异常会导致它中断。
Kylotan

它只是每次都在ZygoteInit.java中停止!真没用!如何克服???
雷诺·塞拉托

Run-> View Breakpoints ....是的,我们不希望在“ View”菜单下显示一个窗口,对吧!
拉里·布德(LarryBud)

7

打破代码中的所有异常以及未捕获的其他异常:

此方法过滤掉运行时在正常操作期间引发的异常类型(不是很特殊,是吗?)。它不使用类过滤器,因为它会过滤掉太多的内容。代码中的错误通常会导致运行时类抛出异常(例如,访问末尾的数组列表)。

  1. 启用Java异常BreakPoints /任何异常仅适用于未捕获的异常。

  2. 捕获和未捕获的异常的类添加新的Java Exception BreakPoint。启用条件并将其设置为此:Exception (java.lang)

        !(this instanceof java.lang.ClassNotFoundException || this instanceof android.system.ErrnoException || this instanceof java.io.FileNotFoundException || this instanceof javax.net.ssl.SSLHandshakeException || this instanceof javax.net.ssl.SSLPeerUnverifiedException || this instanceof android.system.GaiException || this instanceof java.net.SocketTimeoutException || this instanceof java.net.SocketException || this instanceof java.security.NoSuchAlgorithmException)
    

将您遇到的任何其他非异常例外添加到排除列表中。(顺便说一句,使用java.lang.Exception是有效获取第二个“任何异常”条目的方法。)


最好用!(a || b || c)代替!(a)&&!(b)&&!(c)
ceph3us
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.