0

我有以下要调试的代码:

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;
    }
}

我在设置的行上设置断点,timestampsthis.read_db.query...在连接的设备(三星 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因此这可能是不相关的。

4

1 回答 1

0

当您在新的调试迭代之前没有重建项目时,您描述的行为与这种情况非常相似。

当您取消注释提到的行时,调试器开始在正确的位置查看行 。Log.e(TAG, "...

我敢肯定,如果您停止调试并重建项目 - 一切都会好起来的。

于 2013-06-07T14:36:57.693 回答