MDbg.exe (отладчик командной строки для .NET Framework)

Отладчик командной строки для платформы NET Framework помогает разработчикам программ и приложений в поиске и исправлении ошибок в программах, работающих в среде CLR платформы .NET Framework. Этот инструмент использует отладочный API-интерфейс среды выполнения. Программа MDbg.exe может использоваться только для отладки управляемого кода, отладка неуправляемого кода не поддерживается.

Это средство устанавливается автоматически с Visual Studio и пакетом SDK Windows. Чтобы запустить инструмент, мы рекомендуем использовать командную строку Visual Studio или командную строку пакета Windows SDK (командную оболочку). Эти служебные программы позволяют легко работать с инструментом, не переходя к папке установки. Дополнительные сведения см. в разделе Командная строка Visual Studio и пакета Windows SDK.

  • Если на компьютере установлена среда Visual Studio: на панели задач последовательно щелкните Start, All Programs, Visual Studio, Visual Studio Tools и Visual Studio Command Prompt.

    – или –

    Если на компьютере установлен пакет Windows SDK: на панели задач щелкните Start, выберите All Programs и откройте папку с пакетом Windows SDK, затем щелкните Command Prompt (или CMD Shell).

  • В командной строке введите следующее:

MDbg [ProgramName[arguments]] [options]

Команды

Находясь в отладчике (как указано в командной строке mdbg>), введите одну из команд, описанных в следующем разделе:

command [аргументы]

Команды MDbg.exe чувствительны к регистру.

Command

Описание

ap[rocess] [number]

Переключает на другой отлаживаемый процесс или распечатывает доступные процессы. Числа являются не реальными идентификаторами процесса (PID), а номерами в списке с нулевым индексом.

a[ttach] [pid]

Присоединяет к процессу или распечатывает доступные процессы.

b[reak] [ИмяКласса.Метод | ИмяФайла:НомерСтроки]

Устанавливает точку останова в указанном методе. Модули сканируются последовательно.

  • break ИмяФайла:НомерСтроки устанавливает точку разрыва в местоположении в источнике.

  • break ~число устанавливает точку останова на символе, ранее отображенном с помощью команды x.

  • break модуль!ИмяКласса.Метод+СмещениеВПромежуточномЯзыке устанавливает точку остановка в полностью определенном местоположении.

block[ingObjects]

Отображает блокировки монитора, которые блокируют потоки.

ca[tch] [exceptionType]

Вызывает останов отладчика на всех исключениях, а не только на необработанных.

cl[earException]

Отмечает текущее исключение как обработанное, чтобы можно было продолжить выполнение. Если не устранить причину исключения, исключение может возникнуть повторно.

conf[ig] [option value]

Отображает все настраиваемые параметры и способ вызова параметров без необязательных значений. Если параметр указан, задает value как текущий параметр. В настоящее время доступны следующие параметры:

  • extpath задает путь, где выполняется поиск расширений при использовании команды load.

  • extpath+ добавляет путь для загрузки расширений.

del[ete]

Удаляет точку останова.

de[tach]

Отсоединяется от отлаживаемого процесса.

d[own] [frames]

Перемещает активный кадр стека вниз.

echo

Выводит сообщение на консоль.

enableNotif[ication] имя_типа 0|1

Включает (1) или отключает (0) пользовательские уведомления для указанного типа.

ex[it] [exitcode]

Выполняет выход из оболочки MDbg.exe, при необходимости с указанием кода выхода процесса.

fo[reach] [OtherCommand]

Выполняет команду на всех потоках. OtherCommand — это доступная команда, управляющая одним потоком; foreach OtherCommand выполняет ту же команду для всех потоков.

f[unceval] [-ad Num] functionName [args ... ]

Выполняет оценку функции в текущем активном потоке, где функция для оценки — functionName. Имена функций должны быть полными, включая программы имен.

Параметр -ad, определяющий домен приложения, используемый для разрешения функции. Если параметр -ad не указан, домен приложения для разрешения по умолчанию устанавливается на домен приложения, в котором расположен поток, используемый для оценки функции.

Если оцениваемая функция не статическая, первый передаваемый параметр должен быть указателем this. Выполняется поиск аргументов для оценки функций во всех доменах приложения.

Чтобы запросить значение из домена приложения, установите префикс переменной с модулем и именем домена приложения; например, funceval -ad 0 System.Object.ToString hello.exe#0!MyClass.g_rootRef. Данная команда оценивает функцию System.Object.ToString в домене приложения 0. Так как метод ToString является функцией экземпляра, первым параметром должен быть указатель this.

g[o]

Программа продолжается, пока не встретит точку останова, происходит выход из программы, или событие (например, необработанное исключение) вызывает останов программы.

h[elp] [command]

– или –

? [команда]

Отображает описание всех команд или подробное описание указанной команды.

ig[nore] [событие]

Вызывает останов отладчика только на необработанных исключениях.

int[ercept] FrameNumber

Возвращает отладчик к указанному номеру кадра.

Если отладчик обнаруживает исключение, используйте эту команду для возвращения отладчика к указанному номеру кадра. Можно изменить состояние программы с помощью команды set и продолжить использование команды go.

k[ill]

Останавливает активный процесс.

l[ist] [модули | appdomains | сборки]

Отображает загруженные модули, домены приложений или сборки.

lo[ad] assemblyName

Загружает расширение следующим образом: загружается указанная сборка и выполняется попытка запустить статический метод LoadExtension из типа Microsoft.Tools.Mdbg.Extension.Extension.

log [тип_события]

Задать или отобразить события для записи в журнал.

mo[de] [option on/off]

Задает различные параметры отладчика. Используйте mode без параметров для получения списка режимов отладки и их текущих параметров.

mon[itorInfo] ссылка_на_монитор

Отображает сведения о блокировке монитора объекта.

newo[bj] typeName [arguments...]

Создает новый объект типа typeName.

n[ext]

Запускает код и переходит к следующей строке (даже если следующая строка содержит несколько вызовов функций).

Opendump pathToDumpFile

Открывает указанный дамп-файл для отладки.

o[ut]

Перемещается в конец текущей функции.

pa[th] [pathName]

Выполняет поиск указанного пути для исходных файлов, если расположение в двоичных файлах не доступно.

p[rint] [var] | [-d]

Распечатывает все переменные в области (print), распечатывает определенную переменную (print var), либо распечатывает переменные отладчика (print -d).

printe[xception] [-r]

Выводит на печать последнее исключение в текущем потоке. Воспользуйтесь рекурсивным параметром –r для перемещения свойства InnerException в объект исключения для получения сведений о всей цепочке исключений.

pro[cessenum]

Отображает активные процессы.

q[uit] [exitcode]

Выходит из оболочки MDbg.exe, по выбору указывая выходной код процесса.

re[sume] [* | [~]threadNumber]

Возобновляет текущий поток или поток, указанный параметром threadNumber.

Если параметр threadNumber указан как *, либо если номер потока начинается с ~, команда относится ко всем потокам, кроме указанного параметром threadNumber.

Возобновление не приостановленного потока не имеет эффекта.

r[un] [-d(ebug) | -o(ptimize) |-enc] [[path_to_exe] [args_to_exe]]

Останавливает текущий процесс (если есть) и начинает новый процесс. Если не передан аргумент исполняемого файла, эта команда запускает программу, выполнявшаяся ранее командой run. Если передан аргумент исполняемого файла, указанная программа будет запущена с указанными дополнительными аргументами.

Если события загрузки классов и модулей и запуска потоков игнорируются (как это делается по умолчанию), программа будет остановлена на первой исполняемой инструкции основного потока.

Можно принудительно установить отладчик в режим JIT-компиляции кода с помощью любого из трех флагов:

  • -d(ebug) отключает оптимизацию. Это значение по умолчанию для MDbg.exe.

  • -o(ptimize) принудительно включает режим работы кода, более похожий на работу вне отладчика, но несколько осложняющий отладку. Это вариант по умолчанию для использования вне отладчика.

  • -enc активирует функцию "Изменить и продолжить", но снижает производительность.

Set переменная=значение

Изменяет значение любой переменной в области.

Также можно создать собственные переменные отладчика и назначить им значения ссылки из самого приложения. Эти значения действуют как дескрипторы для исходного значения, даже если исходное значение вне области. Все переменные отладчика должны начинаться с $ (например, $var). Очистите эти дескрипторы, установив для них отсутствующее значение с помощью следующей команды:

set $var=

Setip [-il] число

Устанавливает указатель текущей инструкции (Instruction Pointer, IP) в файле на указанную позицию. Если указывается параметр -il, число представляет смещение MSIL в методе. В противном случае число представляет номер строки исходного кода.

sh[ow] [lines]

Задает число строк для отображения.

s[tep]

Переносит выполнение на следующую функцию в текущей строке, либо переходит на следующую строку, если нет функции для перехода.

su[spend] [* | [~]threadNumber]

Приостанавливает выполнение текущего потока, либо потока, заданного параметром threadNumber. Если threadNumber задан как *, команда относится ко всем потокам. Если номер потока начинается с ~, команда относится ко всем потокам, кроме указанного параметром threadNumber. Приостановленные потоки исключаются из выполнения при запуске процесса командой go или step. Если в процессе нет неприостановленных потоков, и подается команда go, процесс не будет продолжен. В этом случае нажмите сочетание клавиш CTRL+C, чтобы войти в процесс.

sy[mbol] commandName [commandValue]

Задает одну из следующих команд:

  • symbol path ["value"] — Отображает или задает текущий путь к символам.

  • symbol addpath "value" — Добавляет к текущему пути к символам.

  • symbol reload ["module"] — Перезагружает либо все символы, либо символы для указанного модуля.

  • symbol list [module] — Отображает текущие загруженные символы либо для всех модулей, либо для указанного модуля.

t[hread] [newThread] [-nick nickname]

Команда потока без параметров отображает все управляемые потоки текущего процесса. Потоки обычно идентифицируются номерами потоков; однако, если поток имеет назначенный псевдоним, вместо номера отображается псевдоним. Можно воспользоваться параметром -nick, чтобы присвоить потоку псевдоним.

  • поток -nick имя_потока присваивает псевдоним выполняемому в настоящее время потоку.

Псевдонимы не могут быть числами. Если в текущем потоке уже есть назначенный псевдоним, старый псевдоним заменяется на новый. Если новый псевдоним — пустая строка (""), псевдоним текущего потока удаляется и потоку назначается новый псевдоним.

u[p]

Перемещает активный кадр стека вверх.

uwgc[handle] [var] | [address]

Распечатывает переменную, отслеживаемую дескриптором. Для указания дескриптора можно использовать имя или адрес.

when

Отображает активные в данный момент операторы when.

когда удалить все| num [num [num …]] — Удаляет указанный номером оператор when или все операторы when, если указано all.

если stopReason [specific_condition] do cmd [cmd [cmd …] ], параметр stopReason может иметь одно из следующих значений:

StepComplete, ProcessExited, ThreadCreated, BreakpointHit, ModuleLoaded, ClassLoaded, AssemblyLoaded, AssemblyUnloaded, ControlCTrapped, ExceptionThrown, UnhandledExceptionThrown, AsyncStop, AttachComplete, UserBreak, EvalComplete, EvalException, RemapOpportunityReached, NativeStop.

специальное условие может быть следующим:

  • number — для ThreadCreated и BreakpointHit активирует действие только при остановке по идентификатору потока или номеру точки останова с тем же значением.

  • [!]name — для ModuleLoaded, ClassLoaded, AssemblyLoaded, AssemblyUnloaded, ExceptionThrown и UnhandledExceptionThrown, активирует действие, только если имя соответствует имени stopReason.

specific_condition должен быть пустым для других значений stopReason.

w[here] [-v] [-c depth] [threadID]

Отображает отладочную информацию о кадрах стека.

  • Параметр -v предоставляет подробную информацию о каждом отображаемом кадре стека.

  • Указание числа для depth, ограничивает количество отображаемых кадров. Используйте команду all для отображения всех кадров. Значение по умолчанию равно 100.

  • Если указать параметр threadID, можно определить, какой поток связан со стеком. Значение по умолчанию — только текущий поток. Используйте команду all, чтобы получить все потоки.

x [-c numSymbols] [module[!pattern]]

Отображает функции, соответствующие параметру pattern для модуля.

Если указан параметр numSymbols, выводится только указанный номер. Если ! (определяющий регулярное выражение) не указан для шаблон, отображаются все функции. Если module не предоставлен, отображаются все загруженные модули. Символы (~#) могут использоваться для установки точек останова с помощью команды break.

Заметки

Скомпилируйте приложение для отладки, используя флаги, зависящие от компилятора, что приведет к созданию компилятором отладочных символов. Дополнительные сведения об этих флагах см. в документации по компилятору. Отладка оптимизированных приложений возможна, но часть отладочной информации будет недоступна. Например, многие локальные переменные будут недоступны, и исходные строки будут неточны.

После компиляции приложения введите в командной строке команду mdbg, чтобы начать сеанс отладчика (см. следующий пример).

C:\Program Files\Microsoft Visual Studio 8\VC>mdbg
MDbg (Managed debugger) v2.0.50727.42 (RTM.050727-4200) started.
Copyright (C) Microsoft Corporation. All rights reserved.

For information about commands type "help";
to exit program type "quit".
mdbg>

Приглашение mdbg> означает, что идет работа с отладчиком.

После того, как вы войдете в отладчик, используйте команды и аргументы, описанные в предыдущем разделе.

См. также

Ссылки

Командная строка Visual Studio и пакета Windows SDK

Другие ресурсы

Инструменты .NET Framework

Журнал изменений

Дата

Журнал

Причина

Апрель 2011

Добавлены сведения об использовании командных строк Visual Studio и Windows SDK.

Улучшение информации.