2010-08-09 4 views
5

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

ответ

7

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

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

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

Удачи.

+0

прохладный, спасибо за это. Любая идея, если я могу получить доступ к неуправляемым вызовам windbg, например, блокировки или анализ? – ngoozeff

+0

@ngoozeff: Я думаю, что здесь возможны только команды sos! Кто-то исправит меня, если я ошибаюсь – ferosekhanj

+8

Извините, что здесь есть nitpicking, но это не команды WinDbg, а команды SOS. К сожалению, обычные команды WinDbg недоступны для VS afaik, что затрудняет использование SOS. Кроме того, VS не поддерживает все необходимые интерфейсы IDebugClient, поэтому вывод из SOS немного шумит в VS. –

4

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

Источник: Use the WinDbg Engine in Visual Studio User-Mode Debugging

+0

У меня установлен Visual Studio 2012 Professional (обновление 4). Тем не менее, * Отладчик режима пользователя Windows * не отображается для меня. Некоторые источники утверждают, что вам нужно установить WDK поверх установки VS, но надежная информация, похоже, недоступна. Итак, в чем дело? – IInspectable

+0

Из ссылки: 'Еще одно предостережение в том, что в настоящее время вам нужно установить WDK поверх Visual Studio 11, чтобы получить интеграцию отладчика.« Это не сработало для меня, пока я не установил WDK. –

+1

Я могу подтвердить, что установка Windows 8.0 WDK поверх Visual Studio также установила интеграцию с Visual Studio. Теперь я могу выбрать * Отладчик режима пользователя Windows * в качестве транспорта (или выбрать другой отладчик из настроек * Отладчика проекта *). Кажется, он работает надежно, хотя для меня это медленно. Некоторые функции от отладчика VS отсутствуют (например, * Tracepoints *), в то время как другие изменились (например, другой синтаксис для установки контрольных точек функции). Мощные команды расширения WinDbg, такие как '! Handle' или'! Locks', теперь доступны из графического интерфейса VS (* Отладка Immediate Window *). – IInspectable

2

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

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

  • Невозможно подключить более чем к одному процессу за раз. Хотя это вообще не проблема, это довольно неудачно, если вам нужно отлаживать более одного процесса за раз. Отладчик Visual Studio может присоединяться к любому количеству процессов одновременно.
  • WinDbg не будет использовать настройки символов из вашей среды Visual Studio IDE (протестирован в VS 2012 Update 4). Хотя вы можете настроить IDE, где искать отладочные символы, WinDbg не будет соблюдать эти настройки. WinDbg будет использовать переменную среды _NT_SYMBOL_PATH и/или конфигурацию, установленную через .sympath.
  • Различные синтаксисы для контрольных точек функции. Это незначительное раздражение, поскольку вы не можете использовать синтаксис Visual Studio для указания контрольных точек функции. Это также означает, что функции breakpoints игнорируются, которые были установлены с использованием синтаксиса Visual Studio. Что более раздражает, тем не менее, вы получаете диалоговое окно предупреждения для каждого при запуске debuggee.
  • Опора для Точки слежения. Я широко использую трассировочные точки, чтобы неинтересно вставлять трассировку в debuggee. Если вы используете контрольные точки, это может оказаться не просто раздражением.
+1

Команда 'bp'' windbg' принимает команду для запуска при ударе точки останова, поэтому вы можете эмулировать точку трассировки. Например, 'bp combase! CoSetErrorInfo 'dt combase! CErrorObject% edx; g" ' –

Смежные вопросы