Как сделать окно ".cmdtree" при запуске в WinDbg? - PullRequest
5 голосов
/ 16 апреля 2010

Я подписался на блог Тесс Феррандез по настройке пользовательской темы в WinDbg.

Я также начал автоматический запуск WinDbg с -c ".cmdtree c: \ mycmdtree.txt"

Это правильно открывает мой файл cmdtree как окно команд, но я не могу заставить его правильно закрепиться. Проблема заключается в том, что окна «команд» могут открываться только после того, как вы открыли файл DMP, но открытие файла DMP выводит вас из «основного» рабочего пространства, поэтому любые изменения в вашем рабочем пространстве не сохраняются.

Есть идеи?

1 Ответ

7 голосов
/ 28 апреля 2010

Этот простой запрос оказывается действительно сложным. Позиции окна WinDbg сохраняются в рабочей области. WinDbg имеет несколько рабочих областей по умолчанию:

  • База - это рабочее пространство, которое используется перед началом отладки (нет открытого дампа, нет открытого exe-файла, ничего не прикреплено)
  • Для каждого файла дампа - для каждого открытого дампа у вас есть рабочее пространство для этого файла
  • Для каждого исполняемого файла - для каждого исполняемого файла, который вы открываете.
  • Режим пользователя - используется при отладке в режиме реального времени
  • Режим ядра - используется при отладке в режиме ядра
  • На архитектуру машины - 1 для x64, 1 для x86 и 1 для IA64
  • Удаленный - используется при удаленной отладке

Для любого данного типа отладки (т. Е. Живого пользовательского режима или анализа дампов после вскрытия) вы обычно получаете комбинацию настроек Base + Ваш тип отладки.

Если вы откроете файл дампа, вы получите BASE + Per dump file Если вы живете в режиме отладки в пользовательском режиме, вы получаете BASE + User-mode Если вы живое ядро ​​отлаживаете машину x64, вы получаете BASE + Kernel-mode + x64

Все изменения, которые вы делаете в любом данном режиме, сохраняются в рабочей области, которая была перекрыта последней. Это означает, что если мы откроем файл дампа (то есть мы Base + Per dump), любые изменения настроек будут сохранены в рабочей области для этого дампа.

В дополнение к встроенным рабочим областям и всем их комбинациям существуют именованные рабочие области (заказчика). Это может произойти, когда вы зайдете в меню «Файл»> «Сохранить рабочее пространство» и предоставите имя для сохранения всех своих настроек, которые затем можно будет включить при запуске Windbg с помощью аргумента командной строки -W.

Вернуться к вашему вопросу. Как мне открыть .cmdtree? В базовой рабочей области вы не можете. Многие из окон доступны только тогда, когда отладчик НЕ находится в состоянии покоя (в его рабочей области BASE). Как только вы переведете отладчик в любое из его активных состояний, эти окна станут доступны.

Проблема, с которой вы сталкиваетесь, состоит в том, что для того, чтобы все было настроено так, как вам нужно, вы должны иметь отладчик в активном состоянии (exe-открытие, дамп-открытие, живая отладка) и когда вы идете к сохранению В вашем макете окна также будет сохранено, какой исполняемый файл у вас был открыт, или дамп, или живая отладка, которую вы делали.

Лучше всего просто сделать то, что вы уже делали, то есть просто использовать -c в реестре (HKEY_CLASSES_ROOT \ WinDbg.DumpFile.1 \ shell \ Open \ command). Это позволит вам просто дважды щелкнуть дамп и получать эти параметры командной строки каждый раз, когда вы выполняете анализ дампов. Затем вы можете создать ярлык для windbg, который также включает в себя командную строку, так что эти параметры будут применяться для других типов отладки, которые вы делаете.

Вот моя командная строка от regkey выше:

"c: \ debuggers \ x64 \ windbg.exe" -z "% 1" -Q -W Internal -c ".load winde.dll; .ableable_unicode 1; .ignore_missing_pages 1; .logopen / t C: \ Пользователи \ jasone \ Logs \ debug.log; aS .p .process / p / r; aS .t .thread / p / r; aS! P! Process; aS! T! Thread; aS .f .frame; aS dv dv / v / i / t; aS .f .frame "

Что это делает?

Запускает отладчик, прикрепляет к файлу дампа, НЕТ запроса на сохранение настроек рабочего пространства, Открывает мое «Внутреннее» рабочее пространство (созданное мной именованное рабочее пространство) и запускает эти команды для загрузки расширений отладчика, настроек и создания псевдонимов, которые делают моя жизнь легче.

...