NullPointerException
s - исключения, возникающие при попытке использовать ссылку, которая указывает на отсутствие местоположения в памяти (null), как если бы она ссылалась на объект. Вызов метода по нулевой ссылке или попытка получить доступ к полю нулевой ссылки вызовет функцию NullPointerException
. Они наиболее распространены, но другие способы перечислены на странице NullPointerException
javadoc.
Вероятно, самый быстрый пример кода, который я мог бы придумать для иллюстрации NullPointerException
, be:
public class Example {
public static void main(String[] args) {
Object obj = null;
obj.hashCode();
}
}
В первой строке внутри main
я явно устанавливаю ссылку Object
obj
равной null
. Это означает, что у меня есть ссылка, но она не указывает на какой-либо объект. После этого я пытаюсь обработать ссылку так, как если бы она указывала на объект, вызывая метод на нем. Это приводит к NullPointerException
, потому что нет кода для выполнения в местоположении, на которое указывает ссылка.
(Это техничность, но я думаю, что она упоминает: ссылка, которая указывает на null, равна 't то же, что и указатель C, указывающий на недопустимую ячейку памяти. Нулевой указатель буквально не указывает на в любом месте , который отличается от указаний на местоположение, которое оказывается недопустимым.)
Если Вы задаетесь вопросом, почему необходимо использовать windbg по Visual Studio, то необходимо читать Усовершенствованный Windows Debugging . Любое время необходимо отладить действительно ужасную проблему windbg, имеет лучшую технологию, чтобы сделать это с, чем Visual Studio. Windbg имеет более мощный язык сценариев и позволяет Вам писать DLLs для автоматизации трудных проблем. Это установит gflags.exe, который дает Вам лучший контроль над "кучей" для отладки перезаписей памяти.
Вы не должны на самом деле выполнять установку, можно просто скопировать файлы и быть готовы пойти. Также это устанавливает adsplus.vb, таким образом, можно взять мини-дампы выполнения процессов. Также очень легко установить для выполнения удаленной отладки. Нет ничего лучше, чем способность отладить проблему с Вашего собственного стола вместо того, чтобы бороться с 15-дюймовым монитором, который мерцает на тестовом ПК.
Для повседневного кода, пишущий я использую Visual Studio, но как только необходимо начать отлаживать проблемы от других компьютеров или оказаться в очень ужасной ситуации, windbg является единственным способом пойти. Пребывание в течение некоторого времени, учась windbg является большими инвестициями. Также при рассмотрении дампов катастрофического отказа существует два больших ресурса, http://www.dumpanalysis.org/blog и http://blogs.msdn.com/ntdebugging/default.aspx , которые делают всю их отладку с помощью windbg.
Вот некоторые дальнейшие ссылки для помощи с использованием WinDbg, большинство - конкретная.NET.
Я использовал его, когда я был отправлен .dmp файлы от сервера NT4.0 - MSVC не загрузит эти старые файлы формата.
Вы не определяете, отлаживаете ли Вы собственный или управляемый код. Это не влияет на ответ, WinDbg чрезвычайно полезен для обоих, но многие люди полагают, что WinDbg так или иначе менее релевантен при отладке приложений.NET. Не так. В качестве награды можно узнать много о том, как платформа.NET работает путем отладки приложения.NET в WinDbg с расширением SOS. Увеличенный (или присоединение к) Ваше приложение.NET в WinDbg и типе...
.loadby sos mscorwks
..., чтобы быть уверенным, что Вы загружаете правильное расширение для версии используемого CLR. Тогда введите...
!help
... для наблюдения, какие команды доступны в расширении SOS.
я услышал, что это шутило, что Microsoft только имеет один инструмент разработчика, и это - WinDbg. Все, что Вы могли возможно хотеть для отладки, там, или в расширении. Несомненно, подмножество тех вещей также доступны в VS с более дружественным UI...:-)
Смешивание отладки ядра плюс remote-user-mode-debugging.
AFAIK, visual studio все еще не может сделать удаленной отладки в режиме, который я описываю как "решение". Это - проклятое серьезное основание использовать windbg.
проблема:
Решение:
кроме того, я нахожу, что это легче использовать тот же отладчик и для привилегированного режима и для непривилегированного режима, windbg очень мощно даже в непривилегированном режиме, и я могу усилить свои собственные windbg расширения и в привилегированном режиме и в экземплярах непривилегированного режима.
Легкий вес, может быть выполнен, не устанавливая его на машине клиента, быстро, может отладить привилегированный режим.
Последняя Visual Studio все еще пропускает эквивалент "-o" windbg, который заставляет отладчик автоматически присоединить к дочерним процессам? Очень полезный для приложений, которые должны быть запущены из сложного .bat файла или приложений, что ветвление и выходит из родительского процесса.
Мне всегда нравилась функция watch and trace: 'wt' -> Она выводит в окно вывода все вызовы функций по мере их выполнения. Это была очень крутая штука!