Почему использование WinDbg по сравнению с отладчиком Visual Studio (VS)?

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, указывающий на недопустимую ячейку памяти. Нулевой указатель буквально не указывает на в любом месте , который отличается от указаний на местоположение, которое оказывается недопустимым.)

58
задан Peter Mortensen 13 February 2013 в 15:56
поделиться

8 ответов

Если Вы задаетесь вопросом, почему необходимо использовать 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.

66
ответ дан LanceSc 24 November 2019 в 18:58
поделиться

Вот некоторые дальнейшие ссылки для помощи с использованием WinDbg, большинство - конкретная.NET.

11
ответ дан Peter Mortensen 24 November 2019 в 18:58
поделиться

Я использовал его, когда я был отправлен .dmp файлы от сервера NT4.0 - MSVC не загрузит эти старые файлы формата.

3
ответ дан Rob 24 November 2019 в 18:58
поделиться

Вы не определяете, отлаживаете ли Вы собственный или управляемый код. Это не влияет на ответ, WinDbg чрезвычайно полезен для обоих, но многие люди полагают, что WinDbg так или иначе менее релевантен при отладке приложений.NET. Не так. В качестве награды можно узнать много о том, как платформа.NET работает путем отладки приложения.NET в WinDbg с расширением SOS. Увеличенный (или присоединение к) Ваше приложение.NET в WinDbg и типе...

.loadby sos mscorwks

..., чтобы быть уверенным, что Вы загружаете правильное расширение для версии используемого CLR. Тогда введите...

!help

... для наблюдения, какие команды доступны в расширении SOS.

я услышал, что это шутило, что Microsoft только имеет один инструмент разработчика, и это - WinDbg. Все, что Вы могли возможно хотеть для отладки, там, или в расширении. Несомненно, подмножество тех вещей также доступны в VS с более дружественным UI...:-)

6
ответ дан Martin 24 November 2019 в 18:58
поделиться

Смешивание отладки ядра плюс remote-user-mode-debugging.

AFAIK, visual studio все еще не может сделать удаленной отладки в режиме, который я описываю как "решение". Это - проклятое серьезное основание использовать windbg.

проблема:

  • Настроенный windbg через 1394. Ваше выполнение приложения на "цели". Windbg работает на "хосте".
  • Visual Studio Выполнения на хосте
  • Имеют запуск Visual Studio Ваше приложение на цели с помощью удаленных инструментов.
  • Врываются в привилегированный режим windbg для остановки, цель
  • Достаточно долго ждут соединения TCP Visual Studio к тайм-ауту
  • , "g" в windbg для неостанавливания цели
  • наблюдают приложение "поп", когда удаленный монитор понимает, что сетевое соединение уводят
  • , перезапускают приложение :(

Решение:

  • не используют Visual Studio.
  • Выполнение непривилегированный режим windbg на цели с "-сервер"
  • Имеют запуск windbg цели Ваше приложение.
  • На хосте, запустите 2-й windbg, который соединяется с целью с "-удаленный".
  • , Если соединение TCP умирает только, запускают другой windbg экземпляр на хосте, и ничто не потеряно. Ваше приложение не умерло, потому что непривилегированный режим управления windbg процесс работает на цели.

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

3
ответ дан JeffJ 24 November 2019 в 18:58
поделиться

Легкий вес, может быть выполнен, не устанавливая его на машине клиента, быстро, может отладить привилегированный режим.

2
ответ дан Nemanja Trifunovic 24 November 2019 в 18:58
поделиться

Последняя Visual Studio все еще пропускает эквивалент "-o" windbg, который заставляет отладчик автоматически присоединить к дочерним процессам? Очень полезный для приложений, которые должны быть запущены из сложного .bat файла или приложений, что ветвление и выходит из родительского процесса.

2
ответ дан JeffJ 24 November 2019 в 18:58
поделиться

Мне всегда нравилась функция watch and trace: 'wt' -> Она выводит в окно вывода все вызовы функций по мере их выполнения. Это была очень крутая штука!

1
ответ дан 24 November 2019 в 18:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: