【发布时间】:2016-05-27 05:26:43
【问题描述】:
我一直在尝试使用 Android Studio 断点来调试我的代码,但它们给了我非常奇怪的行为。例如,我正在尝试调试以下 sn-p:
new AsyncTask<Void, Void, Exception>() {
@Override
protected Exception doInBackground(Void... params) {
try {
Assets assets = new Assets(MainActivity.this);
File assetDir = assets.syncAssets();
setupRecognizer(assetDir);
} catch (IOException e) {
return e;
}
return null;
}
@Override
protected void onPostExecute(Exception result) {
if (result != null) {
((TextView) findViewById(R.id.textView))
.setText("Failed to init recognizer " + result);
} else {
switchSearch(KWS_SEARCH);
}
}
}.execute();
我在行上放了一个断点
Assets assets = new Assets(MainActivity.this);
然后我说“步入”。这将我带到一个“反编译的类文件”和以下代码 sn-p:
public Assets(Context context) throws IOException {
File appDir = context.getExternalFilesDir((String)null);
if(null == appDir) {
throw new IOException("cannot get external files dir, external storage state is " + Environment.getExternalStorageState());
} else {
this.externalDir = new File(appDir, "sync");
this.assetManager = context.getAssets();
}
}
这是完全可以预料和合理的。在此之后,我尝试进入该行
File appDir = context.getExternalFilesDir((String)null);
然后事情变得非常奇怪。首先,我被带到一个新文件中,在该文件中,我在两个方法之间找到了一个空白行。当我尝试进入空白行时,我被弹回到另一个文件,该文件的执行在另一个方法的右花括号处停止。然后我踏入那个花括号,我被带到另一个文件中两个方法之间的另一个空白行。当我踏入其中时,我被带到了下一行,这只是一个@override 注释。步入其中将我带到另一个文件中 if 语句的右花括号。
这种奇怪的行为持续不断,我无法理解。在某一时刻,调试器甚至似乎在评论中间暂停执行!这怎么可能呢?有谁知道为什么会这样?这与我正在调试 AsyncTask 的事实有关吗?
(请注意,我已经重复了这个调试过程四次,每次都出现相同的奇怪行为)
【问题讨论】:
-
当您尝试进入代码的资产实例化行时,进入资产构造函数是正常的,并且是预期的。
-
@FuatCoşkun,我已经意识到这一点。那不是我的问题。我已经对问题进行了一些编辑以澄清
标签: java android debugging android-studio breakpoints