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

StackOverflow https://stackoverflow.com/questions/105130

  •  01-07-2019
  •  | 
  •  

Вопрос

Каковы основные причины использования WinDbg ( ветер ) против отладчика Visual Studio?

И обычно ли он используется как полная замена отладчику Visual Studio или больше для тех случаев, когда возникает такая необходимость.

Это было полезно?

Решение

Если вам интересно, почему вы должны использовать windbg поверх Visual Studio, то вам нужно прочитать Расширенная отладка Windows.Каждый раз, когда вам нужно отладить действительно уродливую проблему, windbg располагает для этого лучшей технологией, чем Visual Studio.Windbg обладает более мощным скриптовым языком и позволяет вам писать библиотеки DLL для автоматизации сложных задач.Он установит gflags.exe, что дает вам лучший контроль над кучей для отладки перезаписей памяти.

На самом деле вам не нужно запускать установку, вы можете просто скопировать файлы и быть готовыми к работе.Также он устанавливает adsplus.vb, так что вы можете создавать мини-дампы запущенных процессов.Его также очень легко настроить для выполнения удаленной отладки.Нет ничего лучше, чем иметь возможность отладить проблему на собственном рабочем столе, вместо того чтобы бороться с 15-дюймовым монитором, который мерцает на тестовом ПК.

Для повседневного написания кода я использую Visual Studio, но как только вам нужно начать отлаживать проблемы с других компьютеров или вы оказываетесь в очень неприятной ситуации, windbg - единственный выход.Потратить некоторое время на изучение windbg - отличная инвестиция.Кроме того, если вы посмотрите на аварийные дампы, то увидите два отличных ресурса, http://www.dumpanalysis.org/blog и http://blogs.msdn.com/ntdebugging/default.aspx которые выполняют всю свою отладку с помощью windbg.

Другие советы

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

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

.loadby sos mscorwks

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

!help

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

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

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

Смешивание отладки ядра и отладки в удаленном пользовательском режиме.

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

Проблема:

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

Решение:

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

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

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

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

Мне всегда нравилась функция "смотреть и отслеживать":'wt' -> Выводит в окно вывода все вызовы функций по мере их выполнения.Это был довольно крутой материал!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top