Отладчик командной строки для платформы .NET Framework (MDbg.exe)
Обновлен: Ноябрь 2007
Отладчик командной строки для платформы NET Framework помогает разработчикам программ и приложений в поиске и исправлении ошибок в программах, работающих в общеязыковой среде выполнения .NET Framework. Этот инструмент использует отладочный API-интерфейс среды выполнения. Исходный код программы MDbg.exe поставляется в качестве примера приложения в SDK (пакет средств разработки программного обеспечения) для Windows. Разработчики могут анализировать этот код для обучения работе со службами отладки. На данный момент программа MDbg.exe может отлаживать только управляемый код, отладка неуправляемого кода не поддерживается.
MDbg [ProgramName[Program arguments]] [optional arguments ]
command [command arguments]
Команды
Команда |
Описание |
---|---|
ap[rocess] [number] |
Переключает на другой отлаживаемый процесс или распечатывает доступные процессы. Числа являются не реальными идентификаторами процесса (PID), а номерами в списке. |
a[ttach] pid |
Присоединяет к процессу или распечатывает доступные процессы. |
b[reak] [ClassName.Method | FileName:LineNo] |
Устанавливает точку останова в указанном методе. Модули сканируются последовательно. break FileName:LineNo устанавливает точку останова в указанном расположении источника. break ~number устанавливает точку останова на символ, ранее отображаемый командой x. break module!ClassName.Method+IlOffset устанавливает точку останова в полностью указанном расположении. |
ca[tch] [exceptionType] |
Вызывает останов отладчика на всех исключениях, а не только необработанных. |
conf[ig] [option value] |
Отображает все доступные для конфигурации параметры и способ вызова параметров без дополнительных значений. Если параметр указан, задает value как текущий параметр. В данный момент доступны следующие параметры: extpath: Задает путь, где выполняется поиск расширений при использовании команды load. extpath+: Добавляет путь к существующим путям, откуда возможна загрузка расширений. |
del[ete] |
Удаляет точку останова. |
de[tach] |
Отсоединяется от отлаживаемого процесса. |
d[own] [frames] |
Перемещает активный кадр стека вниз. |
echo |
Выводит сообщение в консоль. |
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] либо ? [command] |
Отображает описание всех команд, либо подробное описание указанной команды. |
ig[nore] [event] |
Вызывает остановку отладчика только на необработанных исключениях. |
int[ercept] FrameNumber |
Возвращает отладчик к указанному номеру кадра. Если отладчик обнаруживает исключение, используйте эту команду для возвращения отладчика к указанному номеру кадра. Можно изменить состояние программы с помощью команды set и продолжить использование команды go. |
k[ill] |
Останавливает активный процесс. |
l[ist] [modules|appdomains|assemblies] |
Отображает загруженные модули, домены приложений или сборки. |
lo[ad] assemblyName |
Загружает расширение следующим образом: загружается указанная сборка и выполняется попытка запустить статический метод LoadExtension из типа Microsoft.Tools.Mdbg.Extension.Extension. |
mo[de] [option on/off] |
Задает различные параметры отладчика. Параметр option должен быть двухбуквенной парой. |
newo[bj] typeName [arguments...] |
Создает новый объект типа typeName. |
n[ext] |
Запускает код и переходит к следующей строке (даже если следующая строка содержит несколько вызовов функций). |
o[ut] |
Перемещается в конец текущей функции. |
pa[th] [pathName] |
Выполняет поиск указанного пути для исходных файлов, если расположение в двоичных файлах не доступно. |
p[rint] [var] | [-d] |
Распечатывает все переменные в области (print), распечатывает определенную переменную (print var), либо распечатывает переменные отладчика (print -d). |
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] number |
Устанавливает указатель текущей инструкции (Instruction Pointer, IP) в файле на указанную позицию. Если указан параметр -il, число представляет смещение вспомогательного языка в методе. В противном случае число представляет номер строки исходного кода. |
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 name] |
Назначает name как псевдоним для текущего активного потока. Псевдоним может использовать вместо имени потока. Псевдонимы не могут быть числами. Если в текущем потоке уже есть назначенный псевдоним, старый псевдоним заменяется на новый. Если новый псевдоним — "", псевдоним для текущего потока удаляется, и новый псевдоним для потока не назначается. thread newThread — устанавливает newThread в качестве активного потока. newThread может быть либо псевдонимом потока, либо номером потока. thread — Отображает все управляемые потоки в текущем процессе. Потоки обычно идентифицируются номером потока; однако, если поток имеет назначенный псевдоним, вместо номера отображается псевдоним. |
u[p] |
Перемещает активный кадр стека вверх. |
uwgc[handle] [var] | [address] |
Распечатывает переменную, отслеживаемую дескриптором. Для указания дескриптора можно использовать имя или адрес. |
when |
Отображает текущие активные операторы when. when delete all |num[num[num…]] — Удаляет оператор when, указанный номером, или все операторы when, если указано all. when 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 может быть: 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, выводится только указанный номер. Если значение !regex не указано, отображаются все функции. Если module не предоставлен, отображаются все загруженные модули. Символы (~#) могут использоваться для установки точек останова с помощью команды break. |
Примечание. |
---|
Команды MDbg.exe чувствительны к регистру. |
Заметки
Следует компилировать программу для отладки с соответствующими флагами, зависящими от компилятора, т. к. в этом случае компилятор сгенерирует отладочные символы. Дополнительные сведения об этих флагах см. в документации по компилятору. Отладка оптимизированных приложений возможна, но часть отладочной информации будет недоступна. Например, многие локальные переменные будут недоступны, а номера строк исходного кода будут неточны.
После компиляции приложения введите в командной строке команду 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 означает, что идет работа с отладчиком.
Для вызова требуемых функций во время сеанса работы с отладчиком используйте соответствующие команды и аргументы.