2012-03-07 2 views
1

Кто-тестирования Android приложение представила трассировку стека нам, что выглядит следующим образом:Android «приостановлено (Exception X)» трассировки стека

Thread [<21> Thread-31] (Suspended (exception SQLiteException)) 
FooClass.bar(Foo2Class) line: 198 

Строка кода он указывает не связан с SQLite (это а не класс Android, это мой код). Если вы хотите знать, строка кода, он указывает выглядит следующим образом:

if (s_arrayList.contains(foo2)) 

поэтому единственным исключением я мог себе представить, что здесь происходит это NullPointer ... определенно не SQLite исключение.

Мой главный вопрос: что означает «приостановлено (исключение X)»? Если исключение произошло в другом потоке, почему Android сообщает об этой трассе стека?

Update:

Я думаю, что этот вопрос должен сделать с Eclipse, который приостановил нить, когда она обнаружила исключение. Это все еще оставляет мне вопрос без ответа, поэтому Eclipse остановил поток именно в этом месте. Я нашел связанный с этим вопрос, в котором обсуждается эта причуда Eclipse. Вы можете прочитать об этом здесь:

Eclipse Android Debugger - Where in my code did I cause the exception?

+0

Возможно, тип s_arrayList не соответствует типу foo2? – bbedward

+0

Может ли пользователь иметь другую версию приложения? –

+0

Тип правильный, и я уверен, что версия приложения такая же. Настоящая загадка - это то, почему я вижу SQLiteException, когда эта строка кода не имеет никакого отношения к SQL. – Otto

ответ

1

я мог себе представить, гораздо больше случаев. Чтобы отслеживать это, больше кода было бы полезно. Однако осталось очень мало времени

Проверьте, действительно ли трассировка стека соответствует вашей версии кода.

Проверьте, какой тип s_arraylist действительно есть. Это может быть какой-то специальный код, делающий последнее связывание на sqllite. Тем не менее, я не думаю, что это очень вероятно, но лучше проверить

Проверьте, какой тип foo2 действительно есть. Может быть, его метод hashcode или equals использует прямо или косвенно SqlLite. Это мое любимое.

+0

Стефан, спасибо за эти идеи. Я уверен, что трассировка стека соответствует моему коду, и я не думаю, что либо типы arraylist, либо foo2 используют SQLite. Я думаю скорее, что эта проблема связана с тем, что Eclipse приостанавливает поток прямо перед тем, как будет вызвано исключение, но я все еще не понимаю, как/почему Eclipse делает это. – Otto

1

Когда ваша нить бросает подвеску - исключение (точно так же, как в вашей трассе стека), это не означает, что у вас есть нулевой указатель, это означает, что какой-то из другого потока называется Thread.suspend().

+0

Это кажется правдоподобным.Я думаю, что проблема является артефактом того, как Eclipse обрабатывает исключения, когда вы находитесь в режиме отладки, по-видимому, он приостанавливает поток и отображает эту трассировку стека, что не обязательно является основной причиной. Я все еще не понятен, почему Eclipse делает это и как он решает приостановить поток в этой точке. – Otto

+1

Несколько раз лучше работать с журналом, затем отлаживать, вы всегда можете распечатать ** новое исключение ** и увидеть все его трассировку стека –

Смежные вопросы