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] [ИмяКласса.Метод | ИмяФайла:НомерСтроки] |
Устанавливает точку останова в указанном методе. Модули сканируются последовательно.
|
block[ingObjects] |
Отображает блокировки монитора, которые блокируют потоки. |
ca[tch] [exceptionType] |
Вызывает останов отладчика на всех исключениях, а не только на необработанных. |
cl[earException] |
Отмечает текущее исключение как обработанное, чтобы можно было продолжить выполнение. Если не устранить причину исключения, исключение может возникнуть повторно. |
conf[ig] [option value] |
Отображает все настраиваемые параметры и способ вызова параметров без необязательных значений. Если параметр указан, задает value как текущий параметр. В настоящее время доступны следующие параметры:
|
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-компиляции кода с помощью любого из трех флагов:
|
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] |
Задает одну из следующих команд:
|
t[hread] [newThread] [-nick nickname] |
Команда потока без параметров отображает все управляемые потоки текущего процесса. Потоки обычно идентифицируются номерами потоков; однако, если поток имеет назначенный псевдоним, вместо номера отображается псевдоним. Можно воспользоваться параметром -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. специальное условие может быть следующим:
specific_condition должен быть пустым для других значений stopReason. |
w[here] [-v] [-c depth] [threadID] |
Отображает отладочную информацию о кадрах стека.
|
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
Другие ресурсы
Журнал изменений
Дата |
Журнал |
Причина |
---|---|---|
Апрель 2011 |
Добавлены сведения об использовании командных строк Visual Studio и Windows SDK. |
Улучшение информации. |