如何在Android Studio中正确设置异常断点?

Jer*_*ite 6 java android android-studio

我已经尝试了几个月让我的调试器打破我自己的代码,没有成功.ZygoteInit.run()方法中每个未捕获的异常都会中断.

这是我采取的行动清单.

  1. 添加debug { debuggable true }到我的app模块的build.gradle文件中
  2. 手动添加debuggable="true"到我的AndroidManifest.xml文件中
  3. 选中Any exceptionBreakpoints窗口中的复选框
  4. Any exception断点 添加了相关的类过滤器模式
    • 这会导致调试器完全跳过所有未捕获的异常

我一直在调试Logcat中的堆栈跟踪,它确实在堆栈跟踪中显示了我的类.

我已经在稳定和金丝雀频道的当前和以前版本中看到过这个版本.

这里有什么东西我不见了吗?

编辑:只是为了澄清人们,问题是我没有选中"捕获异常"框.选中此框可解决我的问题.

这是我的Gradle文件的相关部分,如果它有帮助的话.

android {
    compileSdkVersion 22
    buildToolsVersion '22.0.0'

    defaultConfig {
        applicationId "com.--redacted--"
        minSdkVersion 15
        targetSdkVersion 22
        versionCode 30
        versionName "0.0.30"
        multiDexEnabled true
    }
    packagingOptions {
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/NOTICE'
        exclude 'META-INF/beans.xml'
    }
    buildTypes {
        debug {
            debuggable true
        }
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    dexOptions {
        javaMaxHeapSize "4g"
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我的Breakpoints窗口的屏幕截图.

断点窗口

CJB*_*JBS 10

还有几件事需要确保:

  • 暂停设置为全部
  • 通知:
    • 如果要捕获定义了错误处理的异常,则捕获异常
    • 如果要捕获未处理的异常,则为未捕获的异常
  • 将类过滤器设置为限制以仅包括您的代码,Android代码和Java代码

请在此处查看更详细的说明:https://stackoverflow.com/a/28862538/3063884

断点对话框

此方法捕获所有引发的异常(检查"捕获"和"未捕获"时).因此提出了所有内部异常.类过滤器的规范通过排除其中一些异常来限制它.例如,在上面的屏幕转储中ClassNotFoundException,忽略了在启动期间频繁引发的屏幕转储.

这种方法的一个小缺点是在app启动期间,可能会有一条消息指示"找不到当前堆栈帧的源类".这是因为尚未加载所有源代码.这只会在启动期间发生一次,可以安全地忽略.避免这种情况的另一种方法(如果在应用启动期间没有预期的例外)是"运行"跑应用程序(而不是启动'Debug'),然后通过运行 - > 将调试器附加到Android进程手动将应用程序附加到调试 ...或者按下连接 工具栏中的按钮.