Android Studio IDE:打破异常

Ale*_*erl 124 debugging breakpoints exception android-studio

我的Android Studio似乎不希望在默认情况下中断任何异常.启用"Any Exception"中断会在实际的JDE库中启动.有没有办法强制它只在我的代码中的异常中断?

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

CJB*_*JBS 190

打破所有异常,抓住或未抓住:

  1. 通过"运行" - >"查看断点"打开"断点"窗口.
  2. 将出现"断点"对话框.在左侧窗格中,滚动到底部.在Java异常断点下选择任何异常
  3. 任何例外选择,在右窗格中,配置如下:
    • 暂停:检查
    • 全部:已选中
    • 条件: !(this instanceof java.lang.ClassNotFoundException)
    • 通知:已选择捕获异常未捕获异常

断点对话框

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

类过滤器

  1. 按" 确定",然后关闭"断点"对话框.

  • 这必须是我见过的最糟糕的异常调试形式.我想打破任何例外.当你必须设置条件和过滤器时,将它称为"任何异常"到底是什么意思?这真是太愚蠢了. (38认同)
  • @AndroidDev它不是最好的界面,特别是在使用Visual Studio IDE时.类过滤器用于防止各种低级错误更频繁地停止应用程序(特别是在应用程序初始化期间).例如,按照上面的步骤操作,但没有类过滤器,然后在调试模式下启动应用程序,看看会发生什么. (6认同)
  • @AndroidDev:我觉得它实际上很有意义.默认情况下,_does_ break在所有异常中.您不必设置条件和过滤器.但是,OP _did专门要求过滤例外_(他自己的代码中的例外). (6认同)
  • 作为xcode/iOS开发人员和android-n00b,我不知道为了解决任何断点,在Android工作室中你无法点击播放式(三角形)图标来启动应用程序.您必须通过单击右侧旁边的类似错误的图标来启动应用程序. (4认同)

Sco*_*rta 33

如果你打开Breakpoints窗口,它会为你提供很多选项让它有条件地破坏.您正在寻找的是"类过滤器" - 您可以使用例如Java包路径指定通配符表达式,并且它只会因匹配类生成的异常而中断.

  • 对于任何寻找断点窗口的人来说,可以在菜单中找到Run - > View Breakpoints. (4认同)
  • 谢谢!!使用android studio让生活变得更轻松! (3认同)
  • 我正在尝试这个,但无法让它发挥作用.班级过滤器应该是什么?可举一些例子吗? (2认同)
  • 我也有同样的情况 - 类过滤器似乎不适合我。我尝试过 com.mycompany.* 但没有任何异常导致它崩溃。 (2认同)

Edw*_*rey 6

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

此方法过滤掉运行时在正常操作期间抛出的异常类型(不是非常特殊,是吗?).它不使用类过滤器,因为它会过滤掉; 代码中的错误通常会导致运行时类抛出异常(例如,访问结束时的数组列表).

  1. 启用Java异常断点/任何异常未捕获的唯一的例外.

  2. 添加一个新的Java异常断点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)
    
    Run Code Online (Sandbox Code Playgroud)

在条件中添加到您遇到的任何其他非例外情况的排除列表.(顺便说一句,使用java.lang.Exception是一种有效获得第二个"任何例外"条目的方法.)