Использование windbg из Visual Studio

Можно ли использовать команды windbg, такие как !locks и .loadby sos mscorwks, из командного окна Visual Studio (в сеансе отладки)? Я заметил, что могу использовать, например, k для печати трассировки стека, поэтому мне было интересно, есть ли способ получить доступ к другим командам.


person ngoozeff    schedule 09.08.2010    source источник


Ответы (3)


Да, ты можешь это сделать.

  1. Подключите Visual Studio 2008 к своему процессу для отладки.
  2. Взломайте какой-нибудь код.
  3. Перейти к немедленному окну
  4. Тип 1_
  5. Теперь вы можете использовать любую из команд windbg, например !EEHeap,!DumpHeap

Есть некоторые условия. Вам необходимо включить отладку неуправляемого кода в свойствах вашего проекта. Обычно в 64-битной версии студия не поддерживает это.

Развлекайся.

person ferosekhanj    schedule 09.08.2010
comment
круто, спасибо за это. Есть идеи, могу ли я получить доступ к неуправляемым вызовам windbg, таким как блокировки или анализ? - person ngoozeff; 09.08.2010
comment
@ngoozeff: Думаю, здесь возможны только команды sos !! Кто-нибудь поправит меня, если я ошибаюсь - person ferosekhanj; 09.08.2010
comment
Извините за придирчивость, но это не команды WinDbg, а команды SOS. К сожалению, обычные команды WinDbg недоступны в VS afaik, что затрудняет использование SOS. Кроме того, VS не поддерживает все необходимые интерфейсы IDebugClient, поэтому вывод из SOS в VS немного зашумлен. - person Brian Rasmussen; 14.08.2010
comment
Брайан прав, строгий ответ на вопрос - НЕТ. SOS - это НЕ WinDbg. Кроме того, WinDbg имеет версию x64, тогда как у SOS ее нет, т.е. если вы хотите отлаживать приложения x64 без перекомпиляции их в 32-битную версию, тогда WinDbg, Outside VS, является единственным выходом. - person Mehdi LAMRANI; 02.05.2011
comment
!load sos не работает на VS2013: «загрузка идентификатора не определена». - person Werner Henze; 11.01.2016

Visual Studio 2012 имеет транспорт «Отладчик пользовательского режима Windows» в диалоговом окне «Присоединить к процессу». Это позволяет вам использовать команды windbg прямо в окне.

Источник: Использование WinDbg Engine при отладке в пользовательском режиме Visual Studio

person Kevin Smyth    schedule 24.06.2013
comment
У меня установлена ​​Visual Studio 2012 Professional (обновление 4). Однако транспорт Windows User Mode Debugger для меня не отображается. Некоторые источники утверждают, что вам необходимо установить WDK поверх установки VS, но надежная информация, похоже, не всегда доступна. Итак, в чем дело? - person IInspectable; 11.12.2014
comment
По ссылке: Another caveat is that currently you need to install the WDK on top of Visual Studio 11 to get the debugger integration. У меня тоже не работало, пока не установил WDK. - person Kevin Smyth; 11.12.2014
comment
Я могу подтвердить, что установка Windows 8.0 WDK поверх Visual Studio также установила интеграцию с Visual Studio. Теперь я могу выбрать Отладчик пользовательского режима Windows в качестве транспорта (или выбрать другой отладчик из настроек Отладчика проекта). Кажется, он работает надежно, хотя для меня это медленно. Некоторые функции отладчика VS отсутствуют (например, Tracepoints), в то время как другие были изменены (например, другой синтаксис для установки точек останова функций). Мощные команды расширения WinDbg, такие как !handle или !locks, теперь доступны из графического интерфейса VS (Immediate Window Debugger). - person IInspectable; 15.12.2014
comment
Примечание. Для Visual Studio 2015 требуется WDK 10 для транспорта отладчика пользовательского режима Windows. - person Kevin Smyth; 25.04.2016

Начиная с Windows Driver Development Kit (WDK) 8.0, отладчик Windows интегрирован в Visual Studio (см. Среды отладки). Установка WDK поверх установки Visual Studio позволит разработчику выбрать несколько отладчиков в диалоговом окне Присоединить к процессу или установить механизм отладки в Отладчике проекта. настройки. Это было проверено для Visual Studio 2012 и 2013. Как я прочитал ссылку MSDN выше, это также должно работать для любой другой IDE, которая поддерживается WDK 8.0 и выше.

Хотя WinDbg предлагает множество мощных команд, есть и некоторые недостатки. Этот список не является исчерпывающим и содержит только те проблемы, с которыми я столкнулся:

  • Невозможно подключиться к нескольким процессам одновременно. Хотя обычно это не проблема, это весьма прискорбно, если вам нужно отлаживать более одного процесса за раз. Отладчик Visual Studio может подключаться к любому количеству процессов одновременно.
  • WinDbg не будет использовать настройки символов из вашей интегрированной среды разработки Visual Studio (проверено на VS 2012 с обновлением 4). Хотя вы можете настроить среду IDE для поиска отладочных символов, WinDbg не будет учитывать эти параметры. WinDbg будет использовать переменную среды _NT_SYMBOL_PATH и / или конфигурацию, установленную через .sympath.
  • Другой синтаксис для точек останова функции. Это незначительное раздражение, поскольку вы не можете использовать синтаксис Visual Studio для указания точек останова функции. Это также означает, что игнорируются точки останова функции, которые были установлены с использованием синтаксиса Visual Studio. Что еще более раздражает, вы получаете диалоговое окно с предупреждением для каждого при запуске отлаживаемой программы.
  • Нет поддержки для Tracepoints. Я широко использую точки трассировки, чтобы ненавязчиво вставлять трассировку в отлаживаемую программу. Если вы также используете точки трассировки, это может оказаться больше, чем просто раздражением.
person IInspectable    schedule 26.12.2014
comment
Команда windbg bp принимает команду для запуска при достижении точки останова, поэтому вы можете имитировать точку трассировки. Например, bp combase!CoSetErrorInfo "dt combase!CErrorObject %edx; g" - person Kevin Smyth; 13.04.2015
comment
Удалось ли вам использовать этот метод с VS 2017 и WDK (особенно с версией 1507+)? На странице «Отладка процесса в пользовательском режиме с помощью Visual Studio» говорится, что эта функция недоступна для этой комбинации, и когда я попытался (после изменения цели на Localhost), я продолжал получать E_FAIL с невозможностью подключения / операция не поддерживается! Я пытаюсь убедиться, что это не просто проблема конфигурации с моей стороны. - person OzgurH; 13.02.2019