2017-01-24 3 views
0

У меня есть объект, который имеет набор методов, вызываемых на нем нравится:Finding какой метод вызывает NPE в Затмении

objectName.method1().method2().method3(); 

, и я хочу знать, какой один из этих методов вызывает NullPointerException быть брошенным. Есть ли способ сделать это в Отладчик Eclipse?

+0

Вы вызываете метод2() на то, что возвращается методом1(), то же самое для метода3(). Если они не очень хорошо протестированы и не будут использовать классы, подобные самому idk, я бы посоветовал в ответе. У вас есть 3 разных объекта и 3 разных метода. Ошибка трассировки стека – efekctive

+0

. Каждый из '.' И '[' являются потенциальными причинами исключений с нулевым указателем. Чтобы избежать ситуации, у вас есть, не более одного из них на одной строке. –

+1

Я не могу представить, что чтение трассировки стека было бы ужасно трудным. – ChiefTwoPencils

ответ

2

Если вы хотите знать, какие конкретные значения неожиданно null (например objectName или возвращаемое значение из method1() или method2()), то я рекомендую расщеплению эту логику в несколько строк. Затем вы сможете установить определенные контрольные точки в отладчике и перейти к точному отказу строки кода.

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

0

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

Если нет, перейдите к методу (F5). Это приведет вас к реализации первого метода. Затем вы можете сразу вернуться из него, выйдя (шаг возврата - F7). Вы должны вернуться к линии orignal с отладчиком, готовым перейти к следующему методу. Вы продолжаете снова вступать (F5). Это должно привести вас к реализации следующего метода. Если вы прибыли туда, то все еще нет исключения. Шаг возврата (F7) снова.

Продолжайте, пока не дойдете до какого-либо обработчика исключений, а не из метода, на который вы хотели бы войти. Это тот, который вам нужен, или, возможно, тот, который был перед ним, потому что тот ответил null.

Вы также можете играть с функцией «Выполнить линию» (по умолчанию Ctrl + R), чтобы сделать это немного легче.

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