Многие объяснения уже присутствуют, чтобы объяснить, как это происходит и как это исправить, но вы также должны следовать рекомендациям, чтобы избежать NullPointerException
вообще.
См. также: A хороший список лучших практик
Я бы добавил, очень важно, хорошо использовать модификатор final
. Использование "окончательной" модификатор, когда это применимо в Java
Сводка:
final
для обеспечения хорошей инициализации. @NotNull
и @Nullable
if("knownObject".equals(unknownObject)
valueOf()
поверх toString (). StringUtils
StringUtils.isEmpty(null)
. Две уловки в коде:
Мне очень нравится атрибут System.Diagnostics.DebuggerStepThrough ; вы можете прикрепить его к классу, методу или свойству, чтобы VS не вводил код по умолчанию при отладке. Я предпочитаю его атрибуту DebuggerHidden , поскольку он по-прежнему позволит вам ставить точки останова в игнорируемый код, если вам действительно нужно его отлаживать.
Другой (иногда) полезный вызов - System.Diagnostics .Debugger.Launch () ; когда исполнение дойдет до него, вам будет представлено диалоговое окно «выберите отладчик», и отладчик запустится. Немного грубо, но полезно и особенно неприятно для присоединения к процессам, например, процесс, который порождается другим и немедленно выполняет ваш код.
Два от меня: тот, что я надеюсь, что все используют повсеместно:
Debug.Assert(<condition>, <message>)
второй DebuggerHidden:
<DebuggerHidden()> _
Public Sub ReadDocumentProperty(ByVal propertyName As String, ByRef PropVal As Integer, ByVal DefaultVal As Integer)
Try
Dim prop As Office.DocumentProperty
prop = CustomProps.Item(propertyName)
PropVal = CType(prop.Value, Integer)
Catch
PropVal = DefaultVal
End Try
End Sub
, Даже если у Вас есть Отладка, Исключения, Повреждение на наборе вызванных исключительных ситуаций, исключения в здесь не будут пойманы.
Условные разрывы очень полезны, если у Вас есть код, который повторяется много, но только перестал работать под определенным набором условий, таких как код в цикле, методы, названные от цикла или методов, названных от нескольких потоков. Поместите оператор завершения в строку интереса и установите его условия для соответствия ошибочному случаю. (Существует быстрый пример здесь .)
Инструменты-> Присоединение К Процессу - легкий забыть, но с ним, я могу отладить сценарий в веб-страницах, управляемый код, загруженный в другом процессе (думают дополнительная модель), или даже неуправляемый код. Будьте осторожны с разрешением ему автоматически выбрать тип отладки, которой Вы интересуетесь.
Точки трассировки (и другие функции точки останова... щелкают правой кнопкой по точке останова и весело проводят время)! - http://blogs.msdn.com/saraford/archive/2008/06/13/did-you-know-you-can-use-tracepoints-to-log-printf-or-console-writeline-info-without-editing-your-code-237.aspx
непосредственное окно является потрясающим.
Удаленная Отладка очень полезна, если Вы развертываете приложения (и может добраться до машины, где проблема может быть воспроизведена).
существуют тонны больше. Попытайтесь войти в WinDbg и SoS!
Я нашел окно Modules полезным много времен. Это говорит, загрузил ли отладчик необходимый dll и какая версия dll загружается. Это также позволяет Вам вручную загрузить или разгрузить dll.
Некоторые от меня
Я всегда удостоверяюсь, что установил свойство "Name" на новых потоках, которые я создаю. Тот путь, когда я отлаживаю, я могу более легко определить различные потоки.
Вот другой аккуратный прием, который я изучил:
System.Diagnostics.Debugger.Break()
программно причины отладчик для повреждения на следующей инструкции. действительно хорошая часть, это также работает на программу, скомпилированную в режим Release без отладочной информации.
try {
// do something big
}
catch {
// breakpoint set here:
throw CantHappenException("something horrible happened that should never happen.");
}
, Как Вы видите исключение, которое было первоначально выдано? В окне часов введите $exception
В неуправляемом коде вы можете установить «точки останова по данным».Они используют регистры отладки ЦП для выдачи INT3, и отладчик останавливается на этой инструкции без дополнительных затрат во время выполнения (в более старой версии отладчик прошел через программу, проверяющую память ... медленно!)
Это полезен, если у вас есть повреждения на известном адресе (стека / куча сбиваются).
Также AutoExp.dat в ide \ packages \ debugger может быть настроен для отображения ваших структур данных.
указатель, mb показывает шестнадцатеричный дамп в окне просмотра http://msdn.microsoft.com/en-us/magazine/dd252945.aspx
Ням!