Почему я могу просматривать живой стек вызовов для некоторых исключений, а не для других?

1

В eclipse у меня есть опция, установленная на точку останова при любом исключении, так что я могу отлаживать состояние приложения при вызове исключения.

Дело 1

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

Изображение 174551


Случай 2

Однако, если я удаляю исключения из других частей моего кода (что-либо в потоке пользовательского интерфейса или в моем потоке GLSurfaceView, похоже,), я получаю совершенно бесполезное поведение. После закрытия силы я вижу исключение в logcat:

05-30 20:18:10.905: E/AndroidRuntime(23982): FATAL EXCEPTION: GLThread 13
05-30 20:18:10.905: E/AndroidRuntime(23982): java.lang.NullPointerException
05-30 20:18:10.905: E/AndroidRuntime(23982):    at x.x.x.Graphics.MyRenderer.drawSubRenderable(MyRenderer.java:237)
05-30 20:18:10.905: E/AndroidRuntime(23982):    at x.x.x.Graphics.MyRenderer.onDrawFrame(MyRenderer.java:181)
05-30 20:18:10.905: E/AndroidRuntime(23982):    at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1363)
05-30 20:18:10.905: E/AndroidRuntime(23982):    at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1118)



но я не могу остановить приложение во время сбоя. Приложение останавливается, но я получаю только это (я не вижу свой код в стеке вызовов):

Изображение 174551



Случай 3

Наконец, если я создаю исключение в потоке пользовательского интерфейса, я получаю этот монстр, но снова мой код, который бросил исключение, нигде не видно:

Изображение 174551

Вопрос

Почему я не могу получить код в точке останова на моем фактическом коде во всех случаях, чтобы я мог проверить, почему возникает исключение? Почему это работает в некоторых случаях, а не в других? Помогло бы это, если бы я установил источник Android? (В настоящее время просто получаю сообщение "источник не найден", когда получаю исключения)

Теги:
exception
debugging

1 ответ

0
Лучший ответ

Поэтому я сделал немного больше исследований, и я думаю, что могу догадаться, что происходит.

В настоящее время я только перехватываю исключаемые исключения, и я предполагаю, что любые исключения, возникающие внутри обратного вызова android, обрабатываются и обновляются, тем самым удаляя мой источник из активной трассировки стека.

Если я поймаю все пойманные исключения, чем во всех случаях, я нахожу свой код в стеке вызовов, как хотелось.

К сожалению, если я поймаю все пойманные исключения, я разорву, вероятно, более 100 исключений, сгенерированных и обработанных внутри системы андроида, что делает ломающиеся на пойманных исключениях несколько бесполезными.

Пожелайте, чтобы здесь было лучшее решение, ответьте, если вы знаете что-нибудь!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню