Comment puis-je debug doInBackground le code d'une AsyncTask

J'ai des points d'arrêt définis, mais ils semblent ignorer (ou jamais vu).

Mon code est ci-dessous. Je suis en train de sauvegarde sql db à une carte SD.

Quand je le lance (pas en mode Debug) dans eclipse, j'obtiens le message de la onPreExecute et suivi de peu par le message de la onPostExecute.

J'ai des points d'arrêt définis dans presque chaque ligne de la ExportDatabaseFileTask.

Quand je le lance (en mode Debug) dans eclipse, je m'arrête à des points d'arrêt dans onPreExecute, et puis comme je l'étape, LE TRÈS à CÔTÉ de la LIGNE le Débogueur va à l'est:

mDbHelper.open();

J'ai ensuite étape à travers le reste du code, et suis parti avec l'AVD montrant le message de la onPreExecute, où il sera apparemment RESTER pour TOUJOURS.

Je ne vois PAS l'une des lignes BREAKPOINTED:

doInBackground
onPostExecute
copyFile

Si, je suis respectueusement en désaccord avec le commentaire que je ne l'ai pas breakpointed ou il n'est pas en cours d'exécution. Donc, je vais reask ma question: Comment faites vous pour déboguer (pas à pas) doInBackground le code d'une AsyncTask?

        case BACKUP_ID:
if (ScoreAGame.this.isExternalStorageAvail()) {
mDbHelper.close();
new ExportDatabaseFileTask().execute();
mDbHelper.open();
} else {
Toast.makeText(ScoreAGame.this, "External storage is not available, unable to export data.",
Toast.LENGTH_SHORT).show();
}
return true;
case RESTORE_ID:
selectCourse();
return true;
}
return super.onMenuItemSelected(featureId, item);
}
private boolean isExternalStorageAvail() {
return Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED);
}
private class ExportDatabaseFileTask extends AsyncTask<String, Void, Boolean> {
private final ProgressDialog dialog = new ProgressDialog(ScoreAGame.this);
//can use UI thread here
protected void onPreExecute() {
this.dialog.setMessage("Exporting database...");
this.dialog.show();
}
//automatically done on worker thread (separate from UI thread)
protected Boolean doInBackground(final String... args) {
File dbFile =
new File(Environment.getDataDirectory() + "/data/com.discgolf/databases/discgolfdb.db");
File exportDir = new File(Environment.getExternalStorageDirectory(), "discgolfbackup");
if (!exportDir.exists()) {
exportDir.mkdirs();
}
File file = new File(exportDir, dbFile.getName());
try {
file.createNewFile();
this.copyFile(dbFile, file);
return true;
}
catch (IOException e) {
Log.e(TAG, e.getMessage(), e);
return false;
}
}
//can use UI thread here
protected void onPostExecute(final Boolean success) {
if (this.dialog.isShowing()) {
this.dialog.dismiss();
}
if (success) {
Toast.makeText(ScoreAGame.this, "Export successful!", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(ScoreAGame.this, "Export failed", Toast.LENGTH_SHORT).show();
}
}
void copyFile(File src, File dst) throws IOException {
FileChannel inChannel = new FileInputStream(src).getChannel();
FileChannel outChannel = new FileOutputStream(dst).getChannel();
try {
inChannel.transferTo(0, inChannel.size(), outChannel);
}
finally {
if (inChannel != null) {
inChannel.close();
}
if (outChannel != null) {
outChannel.close();
}
}
}

}

Essayer de mettre un Journal.d() dans la tâche
Wruble - avez-vous ajouter Log.d() imprime à doInBackground? étaient-ils imprimés?
Je suis en train de lire entre les lignes, mais il semble que vous (tout en ne actuially disant) ne peut pas passer d'un code dans un AsyncTask, et que le onbly façon de déboguer c'est via le Journal de l'instruction. Si c'est vrai, cool, je peux traiter avec elle. Mais d'abord, vous avez dit que j'avais pas de définir des points d'arrêt ou que le codxe n'a pas été exécutée, ce qui IMPLIQUE certainement que vous POUVEZ parcourir le code dans un AysyncTask via le Debug.
Intéressant... j'ai fait le débogage de AsyncTask.doInBackground avant par la définition de points d'arrêt, puis marcher à travers. Eclipse débogueur est plus que capable de le débogage des applications multithread. Le plus probable, le code source n'est pas synchronisée quelque part avec le code compilé. Je suggère de faire "propre" dans Eclipse, puis de reconstruire le projet avant de l'exécuter en mode de débogage. Vérifiez également que les points d'arrêt ne sont pas désactivé (en mode Débogage).
Je viens de découvrir que si j'ai mis quelques Log.d() dans doInBackground() que le débogueur tout d'un coup commence à frapper les points d'arrêt !!

OriginalL'auteur Tom Wruble | 2011-08-13