我正在尝试调试以下代码:
public Cursor getUpdateTimestamps() {
Cursor timestamps;
try {
// int j = 3 / 0; // This will throw a divide-by-zero exception
timestamps = this.read_db.query(UPDATES_TABLE, new String[] { C_ID, U_C_TABLE, U_C_LAST_UPDATE }, null, null, null, null, null);
return timestamps;
} catch (Exception e) {
Log.e(TAG, "An error occurred in getUpdateTimestamps(): " + e.getMessage() + " | " + e.getCause());
return null;
}
}
我将断点设置在timestamps
设置为this.read_db.query...
的行上,并在我连接的设备(Samsung Galaxy S3)上启动调试器。
当我到达断点时,我跳到下一个语句,这会导致抛出异常。但是,调试器不会转到我的catch
块中的第一行,而是直接跳到我的return null
语句而不记录我的错误消息。它也会跳过对System.out.println
的任何调用。
当我取消注释int j = 3 / 0;
时,抛出并捕获正确的异常,并记录错误消息。
什么类型的异常可能导致Log.e()
方法被完全忽略?
更新:我还注意到我的日志中有以下堆栈跟踪,但无法确定它是否与此问题有关:
06-07 11:57:44.717 1757-1757/? W/System.err: android.database.sqlite.SQLiteConstraintException: column packagename is not unique (code 19)
06-07 11:57:44.717 1757-1757/? W/System.err: at android.database.sqlite.SQLiteConnection.nativeExecuteForChangedRowCount(Native Method)
06-07 11:57:44.717 1757-1757/? W/System.err: at android.database.sqlite.SQLiteConnection.executeForChangedRowCount(SQLiteConnection.java:857)
06-07 11:57:44.717 1757-1757/? W/System.err: at android.database.sqlite.SQLiteSession.executeForChangedRowCount(SQLiteSession.java:754)
06-07 11:57:44.717 1757-1757/? W/System.err: at android.database.sqlite.SQLiteStatement.executeUpdateDelete(SQLiteStatement.java:64)
06-07 11:57:44.717 1757-1757/? W/System.err: at android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1665)
06-07 11:57:44.717 1757-1757/? W/System.err: at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1594)
我的所有SQLite表都没有名为packagename
的列,因此可能不相关。
答案 0 :(得分:0)
当您在新的调试迭代之前没有重建项目时,您所描述的行为与情况非常相似。
当您取消注释提到的行时,调试器开始查看行Log.e(TAG, "...
的位置正确。
我敢肯定,如果你停止调试并重建项目 - 一切都会好的。