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

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

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


person e k    schedule 19.09.2008    source источник


Ответы (8)


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

person LanceSc    schedule 19.09.2008

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

person Jack Bolding    schedule 24.09.2008

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

.loadby sos mscorwks

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

!help

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

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

person Martin    schedule 23.09.2008
comment
Если вы задали свойства отладки проекта и включили неуправляемую отладку, вы можете загрузить расширение SOS в Visual Studio. Включите неуправляемую отладку -> установите где-нибудь точку останова -> запустите -> когда вы нажмете точку останова, откройте непосредственное окно (ctrl+alt+i) и введите .load sos. См. blogs.msdn.com/vijaysk /archive/2007/11/15/ для получения дополнительной информации. - person dss539; 04.06.2009

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

person Rob    schedule 19.09.2008

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

Насколько я знаю, Visual Studio до сих пор не может выполнять удаленную отладку в режиме, который я описываю как «решение». Это чертовски веская причина использовать windbg.

Проблема:

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

Решение:

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

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

person JeffJ    schedule 11.02.2009

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

person Nemanja Trifunovic    schedule 19.09.2008

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

person JeffJ    schedule 11.02.2009

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

person C Johnson    schedule 17.07.2010