Я пытаюсь использовать точки останова Android Studio, чтобы отлаживать мой код, но они дают мне чрезвычайно странное поведение. Например, я пытаюсь отлаживать следующий фрагмент кода:Странное поведение отладчика в студии Android при отладке задачи Async
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);
И тогда я говорю «Шаг в». Это берет меня к «декомпилируемой файл класса» и в следующем фрагменте кода:
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, я уже знаю об этом. Это не мой вопрос. Я немного изменил вопрос, чтобы уточнить – TheIronKnuckle