我几个月来一直试图让我的调试器打破我自己的代码,但没有成功。每个未捕获的异常都会在ZygoteInit.run()方法中中断。
以下是我采取的行动清单。
debug { debuggable true }
添加到我的应用模块的build.gradle文件debuggable="true"
添加到我的AndroidManifest.xml文件Any exception
复选框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"
}
}
以下是我的断点窗口的截图。
答案 0 :(得分:10)
还有几件事需要确保:
请在此处查看更详细的说明:https://stackoverflow.com/a/28862538/3063884
此方法捕获所有引发的异常(检查“捕获”和“未捕获”时)。因此提出了所有内部异常。类过滤器的规范通过排除其中一些异常来限制它。例如,在上面的屏幕转储中,将忽略在启动期间频繁引发的ClassNotFoundException
。
这种方法的一个小缺点是在app启动期间,可能会有一条消息指示“无法找到当前堆栈帧的源类”。这是因为尚未加载所有源代码。这只会在启动期间发生一次,可以安全地忽略。避免这种情况的另一种方法(如果在应用启动期间没有预期的异常)是“运行”应用程序(而不是启动“调试”),然后手动将应用程序附加到调试器通过运行 - > 将调试程序附加到Android进程 ...或按工具栏中的按钮。
答案 1 :(得分:1)
您需要将调试程序附加到正在运行的进程
您不必总是重新启动应用程序进行调试 要调试您已在运行的应用程序:
要打开“调试”工具窗口,请单击“调试”
To view and configure the breakpoints settings, click View Breakpoints on the left side of the Debug tool window. The Breakpoints window appears, and there you could configure them.
有三种主要类型的例外:
检查过的execptions:必须由代码处理。 这些代表可以避免的特殊情况 处理和恢复。
运行时异常:无需处理 码。这些代表意想不到的异常情 可以处理但不一定从中恢复。
错误:代码无需处理。这些 代表严重意外的特殊情况 不要试图处理。