MDB Modular Debugger

http://www.opennet.ru/man=mdb <--------оригинал

https://docs.oracle.com <------------ Oracle® Solaris Modular Debugger Guide

https://shrubbery.net/solaris9ab/SUNWdev/

https://shrubbery.net/solaris9ab/SUNWdev/ <----------- ::memstat

Введение

Модульный отладчик (MDB) - это инструмент отладки общего назначения для ОС Solaris, основным достоинством которого является его расширяемость.

Утилита mdb - это расширяемая утилита для низкоуровневой отладки и редактирования работающей операционной системы, аварийных дампов операционной системы, пользовательских процессов, дампов ядра пользовательских процессов и объектных файлов. Более подробное описание функций mdb см. в руководстве «Oracle® Solaris Modular Debugger Guide».

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

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

mdb предоставляет полностью настраиваемую среду для отладки этих программ и сценариев, включая средство динамического модуля dmod, которое программисты могут использовать для реализации своих собственных команд отладки для выполнения анализа, специфичного для программ. Каждый модуль mdb может использоваться для изучения программы в нескольких различных контекстах, включая живой и "посмертный".

Определения

Цель (target ) - программа, проверяемая отладчиком. В настоящее время mdb поддерживает следующие типы целей:

    • пользовательские процессы,

    • основные файлы пользовательских процессов,

    • работающая операционная система (с помощью /dev/kmem и /dev/ksyms),

    • дампы сбоев операционной системы,

    • образы пользовательских процессов, записанные во время сбоя операционной системы - дамп, объектные файлы ELF и необработанные двоичные файлы.

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

Команда отладчика, или dcmd (d-команда) в терминологии mdb, - это процедура в отладчике, которая может получить доступ к любому из свойств текущей цели.

mdb анализирует команды из стандартного ввода, а затем выполняет соответствующий dcmds. Каждый dcmd также может принимать список строковых или числовых аргументов, как показано в описании синтаксиса ниже. mdb содержит набор встроенных dcmds, описанных ниже, которые всегда доступны. Вы также можете расширить возможности самой mdb, написав свои собственные dcmds, как описано в Руководстве по модульному отладчику Solaris.

Обходчик, ходок (walker) - это набор подпрограмм, которые описывают, как обходить или выполнять итерации, элементы определенной структуры данных программы. Обходчик инкапсулирует реализацию структуры данных из dcmds и из самой mdb. Вы можете использовать ходунки в интерактивном режиме или использовать их как примитив для создания других dcmds или ходунков. Как и в случае с dcmds, вы можете расширить mdb, реализовав свои собственные средства обхода как часть модуля отладчика.

Модуль отладчика, или dmod (dee-mod), представляет собой динамически загружаемую библиотеку, содержащую набор dcmds и обходчиков. Во время инициализации mdb пытается загрузить dmod, соответствующие объектам загрузки, присутствующим в цели. Впоследствии вы можете загружать или выгружать dmods в любое время во время работы mdb. mdb поставляется с набором стандартных dmod для отладки ядра Solaris. Руководство по модульному отладчику Solaris содержит дополнительную информацию о разработке собственных модулей отладчика.

Файл макроса - это текстовый файл, содержащий набор команд для выполнения. Макро-файлы обычно используются для автоматизации процесса отображения простой структуры данных. mdb обеспечивает полную обратную совместимость для выполнения макрофайлов, написанных для

adb (1), а установка Solaris включает в себя набор макрофайлов для отладки ядра Solaris, которые можно использовать с любым инструментом.

Синтаксис

Отладчик (mdb) обрабатывает команды из стандартного ввода. Если стандартный ввод - это терминал, mdb предоставляет возможности редактирования терминала.

Отладчик также может обрабатывать команды из макрофайлов и из конвейеров dcmd, как описано ниже.

Синтаксис языка разработан на основе концепции вычисления значения выражения (обычно адреса памяти в целевом объекте) и последующего применения dcmd к этому адресу. Текущее местоположение адреса называется точкой, а на его значение ссылаются с помощью ``. ''.

Метасимвол - это один из следующих символов:

[ ] | ! / \ ? = > $ : ;

NEWLINE SPACE TAB

Пробел - это TAB или SPACE.

Слово - это последовательность символов, разделенных одним или несколькими не заключенными в кавычки метасимволами.

Некоторые из метасимволов функционируют только как разделители в определенных контекстах, как описано ниже.

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

Идентификаторы используются в качестве имен символов, переменных, dcmds и обходчиков.

Команды отделяются NEWLINE или точкой с запятой (;).

Dcmd обозначается одним из следующих слов или метасимволов:

/ \ ? = > $ символ : символ :: идентификатор

dcmds названные метасимволами или префиксом одного $ или : предоставляются как встроенные операторы и обеспечивают полную совместимость с набором команд устаревшей утилиты adb (1). После анализа dcmd символы /, \, ?, =, >, $ и : больше не распознаются как метасимволы до окончания списка аргументов.

Простая команда - это dcmd, за которым следует последовательность из нуля или более слов, разделенных пробелами. Слова передаются в качестве аргументов вызываемому dcmd, за исключением случаев, указанных в разделах «Цитирование и арифметическое расширение» ниже. Каждый dcmd возвращает статус выхода, который указывает, что он был либо успешным, либо неудачным, либо был вызван с недопустимыми аргументами.

Конвейер - это последовательность из одной или нескольких простых команд, разделенных знаком pipe (|). В отличие от оболочки, dcmds в конвейерах mdb не выполняются как отдельные процессы. После разбора конвейера каждый dcmd вызывается в порядке слева направо. Вывод каждого dcmd обрабатывается и сохраняется, как описано в разделе «Конвейеры dcmd» ниже. Как только левый dcmd завершен, его обработанный вывод используется в качестве ввода для следующего dcmd в конвейере. Если какой-либо dcmd не возвращает статус успешного завершения, конвейер прерывается.

Выражение - это последовательность слов, используемая для вычисления 64-разрядного целого числа без знака. Слова оцениваются с использованием правил, описанных в разделе «Арифметическое расширение» ниже.

Команды

Команды могут быть следующие:

pipeline [! слово ...] [ ; ]

Простая команда или конвейер могут быть дополнены суффиксом ! , это символ, указывающий на то, что отладчик должен открыть pipe и отправить стандартный вывод последнего dcmd в конвейере mdb внешнему процессу, созданному путем выполнения $ SHELL -c, за которым следует строка, образованная путем объединения слов после символа ! . Для более подробной информации, смотрите Shell Escape ниже.

expression pipeline [! слово ...] [ ; ]

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

expression , expression pipeline [! слово ...] [ ; ]

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

expression pipeline [! word ...] [ ; ]

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

expression [! слово ...] [ ; ]

Команда может состоять только из арифметического выражения. Выражение вычисляется, и переменной dot устанавливается его значение, а затем выполняются предыдущие dcmd и аргументы с использованием нового значения dot.

expression, expression [! слово ...] [ ; ]

Команда может состоять только из точечного выражения и числа повторных выражений. После того, как точка установлена ​​в значение первого выражения, предыдущие dcmd и аргументы многократно выполняются столько раз, сколько указано в значении второго выражения.

expression [!слово ...] [ ; ]

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

! слово ... [ ; ]

Если команда начинается с ! символа, никакие dcmds не выполняются, и отладчик просто выполняет $HELL -c, за которым следует строка, образованная путем объединения слов после ! символа.

Комментарии

Слово, начинающееся с //, приводит к тому, что это слово и все последующие символы вплоть до NEWLINE игнорируются.

Арифметическое Расширение

Арифметическое расширение выполняется, когда команде mdb предшествует необязательное выражение, представляющее начальный адрес или начальный адрес и счетчик повторений. Арифметическое расширение также может быть выполнено для вычисления числового аргумента для dcmd. Арифметическое выражение может появляться в списке аргументов, заключенном в квадратные скобки, перед которым стоит знак доллара ($ [выражение]), и заменяется значением выражения.

Выражения могут содержать любое из следующих специальных слов:

целое число

    • Указанное целочисленное значение. Целочисленные значения могут иметь префикс 0i или 0I для обозначения двоичных значений, 0o или 0O для обозначения восьмеричных значений, 0t или 0T для обозначения десятичных значений и 0x или 0X для обозначения шестнадцатеричных значений (по умолчанию).

0 [Tt] [0-9] +. [0-9] +

Заданное десятичное значение с плавающей запятой, преобразованное в его представление с плавающей запятой двойной точности IEEE.

'CCCCCCCC'

Целочисленное значение вычисляется путем преобразования каждого символа в байт, равный его значению ASCII. В символьной константе можно указать до восьми символов. Символы упакованы в целое число в обратном порядке (справа налево), начиная с младшего байта.

<идентификатор

Значение переменной, названной идентификатором.

идентификатор

Значение символа, названного идентификатором.

(Выражение)

Значение выражения.

.

Значение точки.

&

Самое последнее значение точки, используемой для выполнения dcmd.

+

Значение точки увеличивается на текущий прирост.

^

Значение точки уменьшается на текущий прирост.

Инкремент - это глобальная переменная, которая хранит общее количество байтов, прочитанных последним форматирующим dcmd. Для получения дополнительной информации о приращении, обратитесь к обсуждению Форматирования dcmds ниже.

Унарные операторы ассоциативны справа и имеют более высокий приоритет, чем бинарные операторы. Унарные операторы:

#expression

Логическое отрицание.

~ выражение

Побитовое дополнение.

-expression

Целочисленное отрицание.

выражение%

Значение величины размером с указатель в месте расположения файла объекта, соответствующее выражению виртуального адреса в виртуальном адресном пространстве цели.

% / [CSIL] / выражение

Значение типа char, short, int или long в расположении файла объекта, соответствующее выражению виртуального адреса в виртуальном адресном пространстве цели.

% / [1248] / выражение

Значение количества в один, два, четыре или восемь байтов в расположении файла объекта, соответствующее выражению виртуального адреса в виртуальном адресном пространстве цели.

* выражение

Значение размера указателя при выражении виртуального адреса в виртуальном адресном пространстве цели.

* / [CSIL] / выражение

Значение типа char, short, int или long в выражении виртуального адреса в виртуальном адресном пространстве цели.

* / [1248] / выражение

Значение количества в один, два, четыре или восемь байтов при выражении виртуального адреса в виртуальном адресном пространстве цели.

Бинарные операторы остаются ассоциативными и имеют более низкий приоритет, чем унарные операторы. Бинарные операторы в порядке приоритета от высшего к низшему:

* Целочисленное умножение.

% Целочисленное деление.

# Левая сторона округлена до следующего кратного правой части.

+ Целочисленное сложение.

- Целочисленное вычитание.

<< Побитовый сдвиг влево.

>> Побитовый сдвиг вправо.

== Логическое равенство.

!= Логическое неравенство.

& Побитовое И.

^ Побитовое исключающее ИЛИ.

| Побитовое ИЛИ

Квотирование

Каждый метасимвол, описанный выше (см. Синтаксис), завершает слово, если оно не заключено в кавычки. Символы могут быть заключены в кавычки (заставляя mdb интерпретировать каждый символ как сам по себе без какого-либо особого значения), заключая их в пару одинарных (' ') или двойных (" ") кавычек. Одиночная кавычка не может появляться в одинарных кавычках. Внутри двойных кавычек mdb распознает escape-последовательности символов языка C.

Shell Escape

символ ! может быть использован для создания конвейера между командой mdb и оболочкой пользователя. Если установлена ​​переменная окружения $ SHELL, mdb разветвляется и запускает эту программу для экранирования оболочки; в противном случае используется /bin/sh. Оболочка вызывается с параметром -c, за которым следует строка, образованная путем объединения слов после! персонаж. ! символ имеет приоритет над всеми другими метасимволами, кроме точки с запятой (;) и NEWLINE. Как только экранирование оболочки обнаружено, оставшиеся символы до следующей точки с запятой или NEWLINE передаются в оболочку как есть. Вывод команд оболочки не может быть передан в mdb dcmds. Команды, выполняемые escape-оболочкой, выводятся непосредственно в терминал, а не в mdb.

Переменные

Переменная - это имя переменной, соответствующее целочисленное значение и набор атрибутов. Имя переменной - это последовательность букв, цифр, подчеркиваний или точек. Переменной может быть присвоено значение с помощью > dcmd или :: typeset dcmd, а ее атрибутами можно управлять с помощью :: typeset dcmd. Значение каждой переменной представляется в виде 64-разрядного целого числа без знака. Переменная может иметь один или несколько из следующих атрибутов:

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

Следующие переменные определены как постоянные:

0

Самое последнее значение печатается с использованием /, \,? Или = dcmd.

9

Самый последний счет использовался с $ <dcmd.

b

Виртуальный адрес базы данных раздела.

d

Размер раздела данных в байтах.

е

Виртуальный адрес точки входа.

m

Начальные байты (магическое число) первичного объектного файла цели или ноль, если объектный файл еще не был прочитан.

t

Размер текстового раздела в байтах.

hits

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

thread

Идентификатор потока текущего репрезентативного потока. Значение идентификатора зависит от модели потоков, используемой текущей целью. См. Поддержка потоков ниже.

Кроме того, цели ядра и процесса mdb экспортируют текущие значения регистра репрезентативного потока, заданного как именованные переменные. Имена этих переменных зависят от платформы цели и архитектуры набора команд.

Symbol Name Resolution

Как писалось в приведенном выше описании синтаксиса, идентификатор символа, присутствующий в контексте выражения, оценивается как значение этого символа. Значение обычно обозначает виртуальный адрес хранилища, связанный с символом в целевом виртуальном адресном пространстве. Цель может поддерживать несколько таблиц символов, включая, но не ограничиваясь этим, первичную исполняемую таблицу символов, первичную динамическую таблицу символов, таблицу символов редактора ссылок во время выполнения и стандартные и динамические таблицы символов для каждого из множества загружаемых объектов. (например, общие библиотеки в пользовательском процессе или модули ядра в ядре Solaris). Цель обычно сначала ищет таблицы символов первичного исполняемого файла, а затем одну или несколько других таблиц символов. Обратите внимание, что таблицы символов ELF содержат записи только для внешних, глобальных и статических символов; автоматические символы не отображаются в таблицах символов, обрабатываемых mdb.

Кроме того, mdb предоставляет частную пользовательскую таблицу символов, которая ищется до любой из таблиц целевых символов. Таблица закрытых символов изначально пуста, и ее можно манипулировать с помощью dcmds :: nmadd и :: nmdel. Опция :: nm -P может использоваться для отображения содержимого таблицы личных символов. Таблица личных символов позволяет пользователю создавать определения символов для программных функций или данных, которые либо отсутствовали в исходной программе, либо были удалены. Эти определения затем используются всякий раз, когда mdb преобразует символическое имя в адрес или адрес в ближайший символ.

Поскольку цели содержат несколько таблиц символов, и каждая таблица символов может включать символы из нескольких объектных файлов, могут существовать разные символы с одинаковым именем. mdb использует символ backquote (`) в качестве оператора определения имени символа, чтобы позволить программисту получить значение нужного символа в этой ситуации. Программист может указать область, используемую для разрешения имени символа, как: имя объекта или имя файла или имя файла. Идентификатор объекта относится к имени загружаемого объекта. Идентификатор файла ссылается на базовое имя исходного файла, который имеет символ типа STT_FILE в таблице символов указанного объекта. Интерпретация идентификатора объекта зависит от типа цели.

Цель ядра mdb ожидает, что объект задает базовое имя загруженного модуля ядра. Например, имя символа

specfs`_init вычисляет значение символа _init в модуле ядра specfs.

Цель процесса mdb ожидает, что объект укажет имя исполняемого файла или загруженной общей библиотеки. Может принимать любую из следующих форм:

1.

Точное совпадение (то есть полное имя пути): /usr/lib/libc.so.1

2.

Точное совпадение базовых имен: libc.so.1

3.

Начальное базовое имя совпадает с суффиксом ``. ': Libc.so или libc

4.

Буквенная строка a.out принимается как псевдоним исполняемого файла.

Цель процесса также принимает любую из четырех форм, описанных выше, с дополнительным идентификатором карты ссылок (lmid). Префикс lmid задается начальным «LM», за которым следует шестнадцатеричный идентификатор карты ссылок, за которым следует дополнительная обратная кавычка. Например, имя символа

LM0`libc.so.1`_init

возвращает значение символа _init в библиотеке libc.so.1, которое загружено на карту ссылок 0 (LM_ID_BASE). Спецификатор карты ссылок может быть необходим для разрешения конфликтов имен символов в случае, если одна и та же библиотека загружена на нескольких картах ссылок.

Для получения дополнительной информации о картах ссылок см. Руководство по компоновщику и библиотекам и dlopen (3C). Идентификаторы карты ссылок отображаются, когда символы печатаются в соответствии с настройкой параметра showlmid, как описано в разделе ОПЦИИ.

В случае конфликта именования между символами и шестнадцатеричными целочисленными значениями mdb пытается сначала оценить неоднозначный токен как символ, прежде чем оценивать его как целочисленное значение. Например, токен f может относиться либо к десятичному целочисленному значению 15, указанному в шестнадцатеричном формате (основание по умолчанию), либо к глобальной переменной с именем f в таблице символов цели. Если присутствует символ с неоднозначным именем, целочисленное значение можно указать, используя явный префикс 0x или 0X.

Разрешение имен dcmd и Walker

Как описано ранее, каждый mdb dmod предоставляет набор dcmds и обходчиков. dcmds и walkers отслеживаются в двух разных глобальных пространствах имен.

mdb также отслеживает пространство имен dcmd и walker, связанное с каждым dmod. Использование идентичных имен dcmds или обходчиков в данном dmod не допускается: dmod с таким типом конфликта имен не загружается. Конфликты имен между dcmds или обходчиками из разных dmods разрешены в глобальном пространстве имен. В случае конфликта первый dcmd или обходчик с тем конкретным именем, которое нужно загрузить, имеет приоритет в глобальном пространстве имен. Альтернативные определения хранятся в списке в порядке загрузки. Символ обратной кавычки (`) может использоваться в имени dcmd или walker в качестве оператора области видимости для выбора альтернативного определения. Например, если каждый из dmod m1 и m2 предоставляет dcmd d, а m1 загружается до m2, то:

:: d

Выполняет определение m1 d.

:: m1`d

Выполняет определение m1 d.

:: m2`d

Выполняет определение м2 d.

Если модуль m1 теперь был выгружен, следующий dcmd в глобальном списке определений (m2`d) будет переведен в глобальную видимость. Текущее определение dcmd или walker может быть определено с помощью :: which dcmd, описанного ниже. Глобальный список определений можно отобразить с помощью параметра :: which -v.

dcmd Pipelines

dcmds может быть составлен в конвейер с помощью pipe(|) оператора. Целью конвейера является передача списка значений, обычно виртуальных адресов, от одного dcmd или обходчика к другому. Этапы конвейера могут использоваться для отображения указателя из одного типа структуры данных на указатель на соответствующую структуру данных, для сортировки списка адресов или для выбора адресов структур с определенными свойствами.

mdb выполняет каждый dcmd в конвейере в порядке слева направо. Крайний левый dcmd выполняется с использованием текущего значения точки или с использованием значения, указанного явным выражением в начале команды. Когда | при обнаружении оператора mdb создает канал (общий буфер) между выводом dcmd слева от парсера mdb и пустым списком значений. Когда dcmd выполняется, его стандартный вывод помещается в канал, а затем используется и обрабатывается синтаксическим анализатором, как если бы mdb считывал эти данные из стандартного ввода. Каждая строка должна состоять из арифметического выражения, оканчивающегося NEWLINE или точкой с запятой (;). Значение выражения добавляется в список значений, связанных с каналом. Если обнаружена синтаксическая ошибка, конвейер прерывается.

Когда dcmd слева от | После завершения оператора список значений, связанных с каналом, затем используется для вызова dcmd справа от | оператор. Для каждого значения в списке точка устанавливается в это значение, и выполняется правый dcmd. Только самый правый dcmd в конвейере выводит свой вывод на стандартный вывод. Если какой-либо dcmd в конвейере выводит стандартную ошибку, эти сообщения печатаются непосредственно со стандартной ошибкой и не обрабатываются как часть конвейера.

Обработка сигналов

Отладчик игнорирует сигналы PIPE и QUIT. Сигнал INT (CTL-C) отменяет команду, которая выполняется в данный момент. Отладчик перехватывает и обеспечивает специальную обработку сигналов ILL, TRAP, EMT, FPE, BUS и SEGV. Если какой-либо из этих сигналов генерируется асинхронно (то есть доставляется из другого процесса с использованием kill (2)), mdb восстанавливает сигнал в его расположение по умолчанию и сбрасывает ядро. Однако, если какой-либо из этих сигналов генерируется синхронно самим процессом отладчика, и в настоящее время выполняется dcmd из внешне загруженного dmod, а стандартный ввод - это терминал, mdb предоставляет меню выбора, позволяющее пользователю принудительно выполнить дамп ядра, выйдите не создавая дамп ядра, остановитесь для присоединения отладчиком или попытайтесь возобновить. Опция возобновления отменяет все активные команды и выгружает dmod, чей dcmd был активен в момент возникновения ошибки. Затем он может быть повторно загружен пользователем. Опция возобновления обеспечивает ограниченную защиту от ошибочных dcmds. Обратитесь к ПРЕДУПРЕЖДЕНИЯМ Использование механизма восстановления после ошибок ниже для получения информации о рисках, связанных с опцией возобновления.

Повторный ввод команды Command Re-entry

Текст последних команд HISTSIZE (по умолчанию 128), введенных с терминального устройства, сохраняется в памяти. Описанное далее средство для оперативного редактирования обеспечивает сопоставления клавиш для поиска и извлечения элементов из списка истории.

Редактирование в строке In-line Editing

Если стандартный ввод - это терминальное устройство, mdb предоставляет несколько простых средств в стиле emacs для редактирования командной строки. Команды поиска, предыдущая и следующая в режиме редактирования предоставляют доступ к списку истории. При поиске сопоставляются только строки, а не шаблоны. В приведенной ниже таблице обозначения для управляющих символов - это знак каретки (^ начало строки, набирается как Ctrl + клавиша), за которым следует символ, показанный в верхнем регистре. Обозначение escape-последовательностей M-, за которым следует символ. Например, M-f вводится нажатием клавиши ESC, за которой следует «f», или нажатием клавиши «Meta», а затем «f» на клавиатурах, которые поддерживают мета-клавишу. Командная строка фиксируется и выполняется с использованием RETURN или NEWLINE. Команды редактирования:

^ F

Переместить курсор вперед (вправо) на один символ.

М-е

Переместить курсор вперед на одно слово.

^ B

Переместить курсор назад (влево) на один символ.

М-b

Переместить курсор назад на одно слово.

^ A

Переместить курсор в начало строки.

^ E

Переместить курсор в конец строки.

^ D

Удалить текущий символ, если текущая строка не пуста. Если текущая строка пуста, ^ D обозначает EOF и отладчик завершает работу.

M- ^ H

(Meta-backspace) Удалить предыдущее слово.

^ K

Удалить от курсора до конца строки.

^ L

Очистите экран и перепечатайте текущую строку.

^ T

Транспонировать текущий персонаж со следующим персонажем.

^ N

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

^ P

Получить предыдущую команду из истории. Каждый раз, когда вводится ^ P, извлекается следующая команда в обратном направлении.

^ R [строка]

Поиск в истории назад для предыдущей командной строки, содержащей строку. Строка должна заканчиваться RETURN или NEWLINE. Если строка опущена, извлекается предыдущий элемент истории, содержащий самую последнюю строку.

Режим редактирования также интерпретирует следующие пользовательские последовательности как команды редактирования. Пользовательские последовательности могут быть прочитаны или изменены с помощью команды stty .

erase

Пользовательский символ стирания (обычно ^ H или ^?). Удалить предыдущий символ.

intr

Пользовательский символ прерывания (обычно ^ C). Прервите текущую команду и напечатайте новое приглашение.

kill

Определяемый пользователем символ уничтожения (обычно ^ U). Убить всю текущую командную строку.

quit

Определяемый пользователем символ выхода (обычно ^ \). Выйти из отладчика.

suspend

Определяемый пользователем символ приостановки (обычно ^ Z). Приостановить отладчик.

werase

Определяемый пользователем символ стирания слова (обычно ^ W). Стереть предыдущее слово.

На клавиатурах, которые поддерживают расширенную клавиатуру с клавишами со стрелками, mdb интерпретирует эти нажатия клавиш как команды редактирования:

стрелка вверх

Получить предыдущую команду из истории (так же, как ^ P).

стрелка вниз

Получить следующую команду из истории (так же, как ^ N).

стрелка влево

Переместите курсор назад на один символ (так же, как ^ B).

правая стрелка

Переместите курсор вперед на один символ (так же, как ^ F).

Output Pager

mdb предоставляет встроенный пейджер вывода. Выходной пейджер включен, если стандартный вывод отладчика является оконечным устройством. Каждый раз, когда выполняется команда, mdb делает паузу после вывода одного экрана и отображает приглашение на пейджер:

>> More [<space>, <cr>, q, n, c, a] ?

Следующие последовательности клавиш распознаются пейджером:

SPACE

Показать следующий экран вывода.

a, A

Прервите текущую команду верхнего уровня и вернитесь к приглашению.

c, C

Продолжайте отображать вывод, не останавливаясь на каждом экране, пока не будет завершена текущая команда верхнего уровня.

n, N, NEWLINE, RETURN

Показать следующую строку вывода.

q, Q, ^C, ^\

Выйти (прервать) только текущий dcmd.

Форматирование dcmds

Метасимволы /, \,? и = используются для обозначения специального выходного форматирования dcmds. Каждый из этих dcmds принимает список аргументов, состоящий из одного или нескольких символов формата, количества повторов или строк в кавычках.

Символ формата - это один из символов ASCII, показанных в таблице ниже. Символы формата используются для чтения и форматирования данных из цели.

Счетчик повторений - это положительное целое число, предшествующее символу формата, которое всегда интерпретируется в десятичной форме. Счетчик повторений также может быть указан как выражение, заключенное в квадратные скобки, перед которым стоит знак доллара ($ []). Строковый аргумент должен быть заключен в двойные кавычки ("").

Пробелы между аргументами формата не нужны.

Dcmds форматирования:

/

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

\

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

?

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

знак равно

Отобразите значение самой точки в каждом из указанных форматов данных. Поэтому = dcmd полезен для преобразования между базами и выполнения арифметики.

Помимо точки, mdb отслеживает другое глобальное значение, которое называется приращением. Приращение представляет расстояние между точкой и адресом после всех данных, прочитанных последним форматированием dcmd. Например, если dcmd форматирования выполняется с точкой, равной адресу A, и отображает 4-байтовое целое число, то после завершения этого dcmd точка все равно A, но приращение устанавливается равным 4.

Символ + (описан в разделе Арифметика Расширение выше) теперь будет оценивать значение A + 4 и может быть использовано для сброса точки на адрес следующего объекта данных для последующего dcmd.

Большинство символов формата увеличивают значение приращения на количество байтов, соответствующее размеру формата данных, показанного в таблице. Таблицу символов формата можно отобразить из mdb с помощью :: format dcmd. Символы формата:

+ увеличить точку на количество (переменный размер)

- уменьшить точку на количество (переменный размер)

/, \, и ? Форматирование dcmds также можно использовать для записи в виртуальное адресное пространство цели, физическое адресное пространство или объектный файл, указав один из следующих модификаторов в качестве первого символа формата, а затем указав список слов, которые являются либо непосредственными значениями, либо вложенными выражениями. в квадратных скобках, перед которыми стоит знак доллара ($ [ ]).

Модификаторы записи:

v

Запишите младший байт значения каждого выражения в целевой объект, начиная с места, указанного точкой.

w

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

W

Запишите младшие 4 байта значения каждого выражения в целевой объект, начиная с места, указанного точкой.

Z

Запишите полные 8 байтов значения каждого выражения в целевую точку, начиная с места, указанного точкой.

/, \, и ? Форматирование dcmds также можно использовать для поиска конкретного целочисленного значения в виртуальном адресном пространстве, физическом адресном пространстве и объектном файле цели соответственно, указав один из следующих модификаторов в качестве первого символа формата, а затем указав значение и необязательный параметр. маска. Значение и маска указываются как непосредственные значения или выражения, заключенные в квадратные скобки, перед которыми стоит знак доллара. Если указано только значение, mdb считывает целые числа соответствующего размера и останавливается на адресе, содержащем соответствующее значение. Если указано значение V и маска M, mdb считывает целые числа соответствующего размера и останавливается на адресе, содержащем значение X, где (X & M) == V. По завершении dcmd точка обновляется до адреса, содержащего матч. Если совпадений не найдено, точка остается на последнем прочитанном адресе.

Модификаторы поиска:

l Поиск указанного 2-байтового значения.

L Поиск указанного 4-байтового значения.

M

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

Контроль исполнения Execution Control

mdb предоставляет средства для контроля и отслеживания выполнения работающей программы. В настоящее время только цель пользовательского процесса обеспечивает поддержку контроля выполнения. mdb предоставляет простую модель контроля выполнения: целевой процесс может быть запущен из отладчика с помощью :: run, или mdb может подключиться к существующему процессу с помощью: A, :: attach или параметра командной строки -p, как описано ниже. Список отслеживаемых программных событий может быть указан пользователем. Каждый раз, когда отслеживаемое событие происходит в целевом процессе, все потоки в целевой остановке, поток, который вызвал событие, выбираются в качестве репрезентативного потока, и управление возвращается к отладчику. Как только целевая программа запущена, управление может быть асинхронно возвращено отладчику, введя определенный пользователем символ прерывания

(обычно ^ C).

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

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

Отладчик может наблюдать различные программные события, включая точки останова, точки наблюдения, сигналы, сбои машины и системные вызовы. Новые спецификаторы могут быть созданы с помощью :: bp, :: fltbp, :: sigbp, :: sysbp или :: wp. С каждым спецификатором связан обратный вызов (командная строка mdb, которая выполняется так, как если бы она была набрана в командной строке), и набор свойств, как описано ниже. Можно создать любое количество спецификаторов для одного и того же события, каждый из которых имеет разные обратные вызовы и свойства. Текущий список отслеживаемых событий и свойства соответствующих спецификаторов событий можно отобразить с помощью :: events dcmd. Свойства спецификатора события определены как часть описания dcmds :: events и :: evset ниже.

Встроенные dcmds управления выполнением, описанные ниже, всегда доступны, но выдают сообщение об ошибке, указывающее, что они не поддерживаются, если применяются к цели, которая не поддерживает управление выполнением. Для получения дополнительной информации о взаимодействии exec, присоединения, выпуска и управления заданиями с управлением выполнением отладчика см. Примечания ниже.

Событие Обратные вызовы Event Callbacks

:: evset dcmd и dcmds трассировки событий позволяют вам связать обратный вызов события (используя опцию -c) с каждым спецификатором события. Обратные вызовы событий - это строки, которые представляют команды mdb для выполнения, когда соответствующее событие происходит в цели. Эти команды выполняются так, как если бы они были введены в командной строке. Перед выполнением каждого обратного вызова переменная точка устанавливается равной значению счетчика программы репрезентативного потока, а переменная «совпадения» - количество совпадений этого спецификатора, включая текущее совпадение.

Если сами обратные вызовы событий содержат одну или несколько команд для продолжения цели (например, :: cont или :: step), эти команды не сразу продолжают цель и ждут, пока она снова остановится. Вместо этого, внутри обратного вызова события, dcmds continue отмечает, что операция продолжения в настоящее время ожидает, а затем немедленно возвращается. Поэтому, если в обратный вызов события включено несколько dcmds, dcmd step или continue должна быть последней указанной командой. После выполнения всех обратных вызовов событий цель немедленно возобновляет выполнение, если все соответствующие обратные вызовы событий запросили продолжение. Если запрашиваются конфликтующие операции продолжения, операция с наивысшим приоритетом определяет тип продолжения. Порядок приоритета от наивысшего к низшему: шаг, шаг (следующий), шаг, продолжение.

Поддержка потоков Thread Support

mdb предоставляет средства для проверки стеков и регистров каждого потока, связанного с целью. Постоянная переменная "thread" содержит текущий репрезентативный идентификатор потока. Формат идентификатора потока зависит от цели. :: regs и :: fpregs dcmds могут использоваться для проверки набора регистров репрезентативного потока или другого потока, если его набор регистров в настоящее время доступен. Кроме того, набор регистров репрезентативного потока экспортируется как набор именованных переменных. Пользователь может изменить значение одного или нескольких регистров, применив> dcmd к соответствующей именованной переменной.

*****Репрезентативный - Дающий объективное представление о чём-л.; являющийся типичным представителем большого количества, совокупности чего-л.

Цель ядра mdb экспортирует виртуальный адрес соответствующей структуры внутреннего потока в качестве идентификатора для данного потока. Руководство по модульному отладчику Solaris содержит дополнительную информацию о поддержке отладки для потоков в ядре Solaris. Цель процесса mdb обеспечивает надлежащую поддержку для проверки многопоточных пользовательских процессов, которые используют собственные интерфейсы lwp_ *, /usr/lib/libthread.so или /usr/lib/lwp/libthread.so. При отладке живого пользовательского процесса mdb обнаруживает, замедляет ли однопоточный процесс или закрывает libthread, и автоматически корректирует его представление о поточной модели на лету. Идентификаторы целевого потока процесса соответствуют либо lwpid_t, thread_t, либо pthread_t представителя, в зависимости от модели потоков, используемой приложением.

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

Встроенный dcmds Built-in dcmds

mdb предоставляет набор встроенных dcmds, которые всегда определены. Некоторые из этих dcmds применимы только к определенным целям: если dcmd не применим к текущей цели, он терпит неудачу и печатает сообщение, указывающее, что «команда не поддерживается текущей целью». Во многих случаях mdb предоставляет мнемонический эквивалент (:: identifier) ​​для устаревших имен adb (1) dcmd. Например, :: quit предоставляется как эквивалент $ q. Программисты, которые имеют опыт работы с adb (1) или ценят краткость или тайны, могут предпочесть формы $ или: встроенных модулей. Программисты, которые плохо знакомы с mdb, могут предпочесть более многословный

:: form. Встроенные модули показаны в алфавитном порядке. Если форма $ или: имеет эквивалент ::identifier, она отображается под формой ::identifier. Встроенные dcmds:

> имя переменной

> / Модификатор / имя-переменной

Присвойте значение точки указанной именованной переменной. Некоторые переменные доступны только для чтения и не могут быть изменены. Если за > следует символ модификатора,

окруженный / /, то значение изменяется как часть назначения. Символы модификатора:

с

количество знаков без знака (1 байт)

s

короткое количество без знака (2 байта)

i

целое число без знака (4 байта)

L

длинное количество без знака (4 байта в 32-битной, 8 байтов в 64-битной)

Обратите внимание, что эти операторы не выполняют приведение. Вместо этого они выбирают указанное число младших байтов (в архитектурах с прямым порядком байтов) или старших байтов (архитектуры с прямым порядком байтов). Модификаторы предусмотрены для обратной совместимости; Вместо этого следует использовать mdb */modifier/ и %/modifier/.

$< имя макроса

Чтение и выполнение команд из указанного файла макроса. Имя файла может быть задано как абсолютный или относительный путь. Если имя файла - простое имя (то есть, если оно не содержит '/'), mdb ищет его в пути включения файла макроса. Если в настоящее время обрабатывается другой файл макроса, этот файл закрывается и заменяется новым файлом.

$<< макро-имя

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

$?

Распечатайте идентификатор процесса и текущий сигнал цели, если это пользовательский процесс или файл ядра, а затем напечатайте общий набор регистров репрезентативного потока.

[sddress] $C [count]

Вывести обратную трассировку стека C, включая информацию об указателе фрейма стека. Если dcmd предшествует явный адрес, отображается обратная трассировка, начинающаяся с этого адреса виртуальной памяти. В противном случае отображается стек репрезентативного потока. Если в качестве аргумента указано необязательное значение count, для каждого кадра стека в выходных данных отображается не более аргументов count.

[base] $d

Получить или установить стандартный выходной радиус. Если dcmd предшествует явное выражение, основание вывода по умолчанию устанавливается на заданную базу; в противном случае текущее основание выводится в виде основы 10 (десятичной). Основой по умолчанию является основание 16 (шестнадцатеричное).

Распечатайте список всех известных внешних (глобальных) символов типа объекта или функции, значение символа и первые 4 (32-битные mdb) или 8 (64-битные mdb) байты, хранящиеся в этом месте в виртуальном целевом объекте. адресное пространство. :: nm dcmd предоставляет более гибкие опции для отображения таблиц символов.

$P prompt-string

Установите подсказку для указанной строки подсказки. По умолчанию предлагается «>». Приглашение также можно установить с помощью :: set -P или параметра командной строки -P.

distance $s

Получить или установить расстояние совпадения символов для преобразования адреса в имя символа. Режимы соответствия символов обсуждаются вместе с параметром командной строки -s в разделе ОПЦИИ. Расстояние совпадения символов также можно изменить с помощью параметра

:: set -s. Если расстояние не указано, отображается текущая настройка.

$ v

Распечатать список именованных переменных, которые имеют ненулевые значения. :: vars dcmd предоставляет другие опции для перечисления переменных.

width $ w

Установите ширину выходной страницы на указанное значение. Как правило, эта команда не нужна, так как mdb запрашивает у терминала его ширину и обрабатывает события изменения размера.

$ W

Снова откройте цель для записи, как если бы mdb был выполнен с параметром -w в командной строке. Режим записи также можно включить с помощью опции :: set -w.

[ pid ] ::attach [ core | pid ]

[ pid ] :A [ core | pid ]

Если цель пользовательского процесса активна, подключите и отладьте указанный идентификатор процесса или файл ядра. Путь к файлу ядра должен быть указан как строковый аргумент. Идентификатор процесса может быть указан как строковый аргумент или как значение выражения, предшествующего dcmd. Напомним, что по умолчанию используется шестнадцатеричное значение, поэтому десятичные PID, полученные с помощью pgrep (1) или ps (1), должны начинаться с «0t», если они указаны в качестве выражений.

[address] ::bp [-/-dDesT] [-c cmd] [-n count] sym ...

address :b [cmd ...]

Установите точку останова в указанных местах. :: bp dcmd устанавливает точку останова на каждом указанном адресе или символе, включая необязательный адрес, указанный явным выражением, предшествующим dcmd, и каждую строку или непосредственное значение, следующее за dcmd. Аргументы могут быть либо именами символов, либо непосредственными значениями, обозначающими конкретный виртуальный адрес, представляющий интерес. Если указано имя символа, оно может ссылаться на символ, который еще не может быть оценен в целевом процессе. То есть он может состоять из имени объекта и имени функции в загружаемом объекте, который еще не был открыт. В этом случае точка останова откладывается и не активна в цели, пока не будет загружен объект, соответствующий данному имени. Точка останова автоматически включается при открытии объекта загрузки. Точки останова для символов, определенных в совместно используемой библиотеке, всегда должны устанавливаться с использованием имени символа и без использования выражения адреса, поскольку адрес может ссылаться на соответствующую запись таблицы процедурных связей (PLT) вместо фактического определения символа. Точки останова, установленные для записей PLT, могут быть перезаписаны редактором ссылок во время выполнения, когда запись PLT впоследствии будет преобразована в фактическое определение символа.

Опции -d, -D, -e, -s, -t, -T, -c и -n имеют то же значение, что и для :: evset dcmd, как описано ниже. Если используется форма :b dcmd, точка останова устанавливается только по виртуальному адресу, указанному в выражении, предшествующем dcmd. Аргументы, следующие за :b dcmd, объединяются вместе для формирования строки обратного вызова. Если эта строка содержит метасимволы, она должна быть заключена в кавычки.

::cat filename ...

Конкатенация и отображение файлов. Каждое имя файла может быть указано как относительный или абсолютный путь. Содержимое файла выводится на стандартный вывод, но не передается на выходной пейджер. Этот dcmd предназначен для использования с | оператор; программист может запустить конвейер, используя список адресов, сохраненных во внешнем файле.

::cont [ SIG ]

:c [ SIG ]

Приостановите отладчик, продолжите целевую программу и дождитесь ее завершения или остановки после интересующего программного события. Если цель уже запущена, поскольку отладчик был подключен к работающей программе с включенной опцией -o nostop, этот dcmd просто ожидает завершения или остановки цели после интересующего события. Если в качестве аргумента указано необязательное имя или номер сигнала (см. Signal.h (3HEAD)), сигнал немедленно доставляется к цели как часть возобновления его выполнения. Если сигнал SIGINT отслеживается, управление может быть асинхронно возвращено отладчику путем ввода пользовательского символа прерывания (обычно ^ C). Этот сигнал SIGINT автоматически очищается и не наблюдается целью при следующем продолжении. Если целевая программа в данный момент не запущена, :: cont запускает новую программу, выполняемую как :: run.

address ::context

address $p

Переключение контекста на указанный процесс. Операция переключения контекста действительна только при использовании цели ядра. Контекст процесса указывается с использованием адреса его структуры proc в виртуальном адресном пространстве ядра. Адрес специального контекста «0» используется для обозначения контекста самого ядра. mdb может выполнять переключение контекста только при проверке аварийного дампа, если дамп содержит страницы физической памяти указанного пользовательского процесса (а не только страницы ядра). Средство аварийного дампа ядра может быть сконфигурировано для выгрузки всех страниц или страниц текущего пользовательского процесса с использованием dumpadm (1M). :: status dcmd может использоваться для отображения содержимого текущего аварийного дампа.

Когда пользователь запрашивает переключение контекста у цели ядра, mdb создает новую цель, представляющую указанный пользовательский процесс. Как только происходит переключение, новая цель вставляет свои dcmds на глобальном уровне: таким образом, / dcmd теперь форматирует и отображает данные из виртуального адресного пространства пользовательского процесса, :: mappings dcmd отображает отображения в адресном пространстве пользователя. процесс и тд. Цель ядра можно восстановить, выполнив 0 :: context.

:: dcmds

Перечислите доступные dcmds и распечатайте краткое описание для каждого.

[ address ] ::delete [ id | all ]

[ address ] :d [ id | all ]

Удалить спецификаторы событий с указанным номером. Аргумент id номер интерпретируется в десятичном виде по умолчанию. Если перед dcmd указан необязательный адрес, все спецификаторы событий, связанные с данным виртуальным адресом, удаляются (например, все точки останова или точки наблюдения, влияющие на этот адрес). Если задан специальный аргумент «all», все спецификаторы событий удаляются, кроме тех, которые помечены как прикрепленные (флаг T). :: events dcmd отображает текущий список спецификаторов событий.

[ address ] ::dis [ -fw ] [ -n count ] [ address ]

Разбирать, начиная с адреса, указанного в последнем аргументе, или вокруг него, или текущего значения точки. Если адрес соответствует началу известной функции, вся функция разбирается. В противном случае, «окно» инструкций до и после указанного адреса печатается для обеспечения контекста. По умолчанию инструкции читаются из виртуального адресного пространства цели. Если указана опция -f, инструкции считываются из объектного файла цели. Опция -f включена по умолчанию, если отладчик в данный момент не подключен к активному процессу, файлу ядра или аварийному дампу. Опция -w может использоваться для принудительного включения режима «окна», даже если адрес является началом известной функции. Размер окна по умолчанию составляет десять инструкций; количество инструкций может быть указано явно с помощью опции -n.

:: disasms

Перечислите доступные режимы дизассемблера. Когда цель инициализируется, mdb пытается выбрать соответствующий режим дизассемблера. Пользователь может изменить режим на любой из перечисленных режимов, используя :: dismode dcmd.

::dismode [ mode ]

$V [ mode ]

Получить или установить режим дизассемблера. Если аргумент не указан, выведите текущий режим дизассемблера. Если указан аргумент режима, переключите дизассемблер в указанный режим. Список доступных дизассемблеров можно отобразить с помощью :: disasms dcmd.

::dmods [ -l ] [ module-name ]

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

[ address ] ::dump [ -eqrstu ] [ -f|-p ]

#sp;#sp;[ -g bytes ] [ -w paragraphs ]

Выведите шестнадцатеричный дамп и дамп памяти ASCII 16-байтовой выровненной области памяти, содержащей адрес, указанный точкой. Если для :: dump указано число повторов, это интерпретируется как количество байтов для дампа, а не как число итераций. :: dump dcmd также распознает следующие параметры:

-e

Настраивает на порядок байтов. Опция -e предполагает 4-байтовые слова. Опцию -g можно использовать для изменения размера слова по умолчанию.

-f

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

-g bytes

Отображает байты в группах байтов. Размер группы по умолчанию составляет 4 байта. Размер группы должен быть степенью двойки, которая делит ширину линии.

-p

Интерпретирует адрес как местоположение физического адреса в адресном пространстве цели вместо виртуального адреса.

-q

Не печатает ASCII-декодирование данных.

Номера строк относительно начального адреса вместо явного адреса каждой строки. Эта опция подразумевает опцию -u.

-s

Элиды повторяют линии.

-t

Только читает и отображает содержимое указанных адресов, а не читает и печатает целые строки.

-u

Выравнивание вывода вместо выравнивания вывода на границе абзаца.

-w paragraphs

Отображает абзацы в 16-байтовых абзацах на строку. Количество абзацев по умолчанию - один. Максимальное значение, принимаемое для -w, составляет 16.

::echo [ string | value ...]

Выведите аргументы, разделенные пробелами и завершенные символом NEWLINE, для стандартного вывода. Выражения, заключенные в $ [], оцениваются как значения и печатаются в базе по умолчанию.

:: eval команда

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

::events [ -av ]

$b [ -av ]

Отобразите список программных событий. Каждому спецификатору события присваивается уникальный идентификационный номер, который можно использовать для его удаления или изменения позднее. Отладчик также может иметь собственные внутренние события, включенные для трассировки. Эти события отображаются только при наличии опции -a. Если указана опция -v, отображается более подробное отображение, включая причину отсутствия активности спецификатора. Вот пример вывода:

> ::events ID S TA HT LM Description Action ----- - -- -- -- -------------------------------- ------ [ 1 ] - T 1 0 stop on SIGINT - [ 2 ] - T 0 0 stop on SIGQUIT - [ 3 ] - T 0 0 stop on SIGILL - [ 11] - T 0 0 stop on SIGXCPU - [ 12] - T 0 0 stop on SIGXFSZ - [ 13] - 2 0 stop at libc`printf ::echo printf >

Следующая таблица объясняет значение каждого столбца. Сводка этой информации доступна с помощью :: help events.

ID

Идентификатор спецификатора события. Идентификатор отображается в квадратных скобках [], если спецификатор включен, в круглых скобках (), если спецификатор отключен, или в угловых скобках <>, если целевая программа в данный момент остановлена ​​на событии, соответствующем данному спецификатору.

S

Состояние спецификатора события. Состояние является одним из следующих символов:

-

Спецификатор события простаивает. Когда целевая программа не запущена, все спецификаторы простаивают. Когда целевая программа запущена, спецификатор может простаивать, если его невозможно оценить (например, отложенная точка останова в общем объекте, который еще не загружен).

+

Спецификатор события активен. Когда цель продолжается, события этого типа обнаруживаются отладчиком.

*

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

!

Спецификатор события не был активирован из-за ошибки операционной системы.

Опция :: events -v может использоваться для отображения дополнительной информации о причине сбоя инструментария.

TA

Свойства спецификатора события Temporary, Sticky и Automatic. Может быть показан один или несколько из следующих символов:

t

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

T

Спецификатор события является липким и не может быть удален с помощью :: delete all или: z. Спецификатор может быть удален путем явного указания его идентификатора на :: delete.

d

Спецификатор события автоматически отключается, когда число попаданий равно пределу попадания.

D

Спецификатор события автоматически удаляется, когда количество совпадений равно пределу попаданий.

s

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

HT

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

LM

Текущий предел попадания. В этом столбце отображается ограничение на количество обращений, при котором вступают в силу режимы автоматического отключения, автоматического удаления или автоматического останова. Эти поведения могут быть настроены с помощью :: evset dcmd, описанного ниже.

oписание

Описание типа программного события, которое соответствует заданному спецификатору.

действие

Строка обратного вызова для выполнения при возникновении соответствующего программного события. Этот обратный вызов выполняется так, как если бы он был набран в командной строке.

[id] :: evset [- / - dDestT] [-c cmd] [-n count] id ...

Измените свойства одного или нескольких описателей программных событий. Свойства устанавливаются для каждого спецификатора, определенного необязательным выражением, предшествующим dcmd, и необязательным списком аргументов, следующих за dcmd. Список аргументов интерпретируется как список десятичных целых чисел, если не указано явное основание. :: evset dcmd распознает следующие параметры:

-d

Отключает спецификатор события, когда число попаданий достигает предела попаданий. Если задана форма -d опции, это поведение отключено. Как только спецификатор события отключен, отладчик удаляет все соответствующие инструментальные средства и игнорирует соответствующие программные события, пока этот спецификатор не будет снова включен. Если опция -n отсутствует, спецификатор немедленно отключается.

-D

Удаляет спецификатор события, когда число попаданий достигает предела попаданий. Если задана форма -D опции, это поведение отключено. Опция -D имеет приоритет над опцией -d. Предел попаданий можно настроить с помощью опции -n.

-e

Включает спецификатор события. Если задана форма -e опции, спецификатор отключен.

-s

Останавливает целевую программу, когда количество попаданий достигает предела попаданий. Если задана форма опции -s, это поведение отключено. Поведение -s заставляет отладчик действовать так, как если бы :: cont выдавался после каждого выполнения обратного вызова спецификатора, за исключением N-го выполнения, где N - текущее значение предела попаданий спецификатора. Опция -s имеет приоритет над опцией -D и опцией -d.

-t

Отмечает спецификатор события как временный. Временные спецификаторы автоматически удаляются при следующей остановке цели независимо от того, остановилась ли она в результате программного события, соответствующего заданному спецификатору. Если задана форма опции -t, временный маркер удаляется. Опция -t имеет приоритет над опцией -T.

-T

Отмечает спецификатор события как прикрепленный. Липкие спецификаторы не удаляются с помощью :: delete all или : z. Их можно удалить, указав соответствующий идентификатор спецификатора в качестве явного аргумента для :: delete. Если задана форма опции -T, свойство sticky удаляется. Набор спецификаторов событий по умолчанию изначально помечен как прикрепленный.

Выполняет указанную строку cmd каждый раз, когда в целевой программе происходит соответствующее программное событие. Текущая строка обратного вызова может быть отображена с помощью :: events.

-n

Устанавливает текущее значение лимита попадания для подсчета. Если в настоящее время не установлен предел попадания, а опция -n не сопровождает -s или D, предел попадания устанавливается равным единице.

Сводка этой информации доступна с помощью :: help evset.

::files

$f

Распечатать список известных исходных файлов (символы типа STT_FILE присутствуют в различных таблицах целевых символов).

[flt] :: fltbp [- / - dDestT] [-c cmd] [-n count] flt ...

Отслеживайте указанные неисправности машины. Ошибки идентифицируются с помощью необязательного номера ошибки, предшествующего dcmd, или списка имен или номеров ошибок

(см. <Sys / fault.h>) после dcmd. Опции -d, -D, -e, -s, -t, -T, -c и -n имеют то же значение, что и для :: evset dcmd.

[ thread ] ::fpregs

[ thread ] $x, $X, $y, $Y

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

::formats

Перечислите доступные символы выходного формата для использования с /, \,? и = форматированием dcmds. Форматы и их использование описаны в разделе «Форматирование dcmds» выше.

::grep command

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

:: help [dcmd-name]

Без аргументов, :: help dcmd выводит краткий обзор средств помощи, доступных в mdb. Если указано имя dcmd, mdb печатает сводку об использовании этого dcmd.

signal :i

Если целью является живой пользовательский процесс, игнорируйте указанный сигнал и разрешите его прозрачную доставку к цели. Все спецификаторы событий, отслеживающие доставку указанного сигнала, удаляются из списка отслеживаемых событий. По умолчанию набор игнорируемых сигналов инициализируется как дополнение к набору сигналов, которые заставляют процесс выгружать ядро ​​по умолчанию (см. signal.h (3HEAD)), за исключением SIGINT, который отслеживается по умолчанию.

$i

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

:: events dcmd.

::kill

:k

Принудительно завершить цель, если это живой пользовательский процесс. Цель также принудительно завершается при выходе из отладчика, если она была создана отладчиком с помощью :: run.

$l

Выведите LWPID репрезентативного потока, если целью является пользовательский процесс.

$L

Напечатайте LWPID каждого LWP в целевом объекте, если целевой пользовательский процесс.

[ address ] ::list type member [ variable-name ]

Просмотрите элементы структуры данных связанного списка и распечатайте адрес каждого элемента в списке. Адрес первого элемента в списке можно указать с помощью необязательного адреса. В противном случае предполагается, что список начинается с текущего значения точки. Параметр type должен называть структуру C или тип объединения и используется для описания типа элементов списка, чтобы mdb мог читать объекты соответствующего размера. Параметр member используется для именования члена типа, который содержит указатель на следующий элемент списка. dcmd :: list продолжает итерацию до тех пор, пока не встретится указатель NULL, не будет достигнут первый элемент (циклический список) или пока не произойдет ошибка при чтении элемента. Если указано необязательное имя переменной, указанной переменной присваивается значение, возвращаемое на каждом шаге обхода, когда mdb вызывает следующий этап конвейера. :: list dcmd может использоваться только с объектами, которые содержат символическую отладочную информацию, предназначенную для использования с mdb. Обратитесь к ПРИМЕЧАНИЯМ, символической информации отладки, ниже для получения дополнительной информации.

:: load [-s] module-name

Загрузите указанный dmod. Имя модуля может быть задано как абсолютный или относительный путь. Если module-name - это простое имя (то есть не содержит «/»), mdb ищет его в пути к библиотеке модулей. Модули с конфликтующими именами не могут быть загружены; существующий модуль должен быть выгружен первым. Если присутствует опция -s, mdb хранит молчание и не выдает никаких сообщений об ошибках, если модуль не найден или не может быть загружен.

::log [ -d | [ -e ] filename ]

$> [ filename ]

Включить или отключить выходной журнал. mdb предоставляет интерактивное средство ведения журнала, где как входные команды, так и стандартный вывод могут быть записаны в файл при взаимодействии с пользователем. Параметр -e включает запись в указанный файл или повторное включение входа в предыдущий файл журнала, если имя файла не указано. Опция -d отключает ведение журнала. Если используется $> dcmd, ведение журнала включено, если указан аргумент имени файла; в противном случае регистрация отключена. Если указанный файл журнала уже существует, mdb добавляет любой новый вывод журнала в файл.

::map command

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

[ address ] ::mappings [ name ]

[ address ] $m [ name ]

Распечатайте список каждого сопоставления в виртуальном адресном пространстве цели, включая адрес, размер и описание каждого сопоставления. Если dcmd предшествует адрес, mdb показывает только отображение, содержащее данный адрес. Если задан аргумент имени строки, mdb показывает только отображение, соответствующее этому описанию.

::next [ SIG ]

:e [ SIG ]

Шагните целевой программе одну инструкцию, но перешагните вызовы подпрограмм. Если в качестве аргумента указано необязательное имя или номер сигнала (см. signal.h (3HEAD)), сигнал немедленно доставляется к цели как часть возобновления его выполнения. Если в данный момент не выполняется ни одна целевая программа, :: next запускает новую программу, работающую как будто by :: run, и останавливается при первой инструкции.

[ address ] ::nm [ -DPdghnopuvx ] [ -t types ]

#sp;#sp;[ -f format ] [ object ]

Распечатайте таблицы символов, связанные с текущей целью. Если указан дополнительный адрес, предшествующий dcmd, отображается только запись в таблице символов для символа, соответствующего адресу. Если объект указан, отображается только таблица символов для этого загружаемого объекта. :: nm dcmd также распознает следующие параметры:

-D

Печатает .dynsym (таблица динамических символов) вместо .symtab.

-P

Печатает таблицу личных символов вместо .symtab.

-d

Печатает поля значений и размеров в десятичном формате.

-g

Печатает только глобальные символы.

-h

Подавляет строку заголовка.

-n

Сортирует символы по имени.

Печатает поля значений и размеров в восьмеричном виде.

-p

Печатает символы в виде серии команд :: nmadd. Эта опция может использоваться с -P для создания файла макроса, который впоследствии может быть прочитан в отладчик с помощью $ <.

-u

Печатает только неопределенные символы.

-v

Сортирует символы по значению.

-x

Печатает поля значений и размеров в шестнадцатеричном формате.

-t type[,type ... ]

Печатает только символы указанного типа (типов). Допустимые аргументы типа:

noty

STT_NOTYPE

objt

STT_OBJECT

func

STT_FUNC

sect

STT_SECTION

file

STT_FILE

comm

STT_COMMON

tls

STT_TLS

regi

STT_SPARC_REGISTER

-f format[,format ... ]

Печатает только указанную символьную информацию. Допустимые строки аргумента формата:

ndx

индекс таблицы символов

val

значение символа

size

размер в байтах

type

тип символа

bind

binding

oth

other

shndx

индекс раздела

name

имя символа

ctype

тип C для символа (если известен)

obj

объект, который определяет символ

value ::nmadd [ -fo ] [ -e end ] [ -s size ] name

Добавьте указанное имя символа в таблицу символов. mdb предоставляет частную настраиваемую таблицу символов, которую можно использовать для вставки в таблицу символов цели, как описано в разделе «Разрешение имен символов» выше. :: nmadd dcmd также распознает следующие параметры:

-e

Устанавливает размер символа в конечное значение.

-f

Устанавливает тип символа на STT_FUNC.

Устанавливает тип символа на STT_OBJECT.

-s

Устанавливает размер символа в размер.

::nmdel name

Удалить указанное имя символа из таблицы личных символов.

::objects [ -v ]

Распечатайте карту виртуального адресного пространства цели, показывая только те сопоставления, которые соответствуют первичному сопоставлению (обычно текстовый раздел) каждого из известных объектов загрузки. Опция -v отображает версию каждого загружаемого объекта. Информация о версии доступна не для всех загружаемых объектов. Загружаемые объекты без информации о версии указаны как имеющие версию «Неизвестно» в выходных данных для опции -v.

::offsetof type member

Вывести смещение указанного члена указанного типа. Тип должен быть именем структуры C. Смещение печатается в байтах, если только элемент не является битовым полем, в этом случае смещение может быть напечатано в битах. Для ясности к выходу всегда добавляются соответствующие единицы. В качестве имени типа можно использовать оператор области видимости обратной кавычки (`), описанный в разделе Разрешение имен символов выше. :: offsetof dcmd может использоваться только с объектами, которые содержат символическую отладочную информацию, предназначенную для использования с mdb. Обратитесь к ПРИМЕЧАНИЯМ, символической информации отладки, ниже для получения дополнительной информации.

address ::print [ -aCdiLptx ] [ -c lim ]

#sp;#sp;[ -l lim ] [ type [ member ... ] ]

Распечатать структуру данных по указанному виртуальному адресу, используя информацию данного типа. Параметр типа может называть структуру C, объединение, перечисление, основной целочисленный тип или указатель на любой из этих типов. Если имя типа содержит пробел (например, «struct foo»), оно должно быть заключено в одинарные или двойные кавычки. В качестве имени типа можно использовать оператор области видимости обратной кавычки (`), описанный в разделе Разрешение имен символов выше. Если тип является структурированным типом, :: print dcmd рекурсивно печатает каждый член структуры или объединения. Если аргумент типа отсутствует и статический или глобальный символ STT_OBJECT совпадает с адресом, :: print автоматически выводит соответствующий тип. Если указан аргумент типа, за ним может следовать необязательный список выражений-членов, и в этом случае отображаются только те члены и подчлены указанного типа. Если тип содержит другие структурированные типы, каждая строка-член может ссылаться на элемент подструктуры, формируя список имен элементов, разделенных точками ('.'). :: print dcmd может использоваться только с объектами, которые содержат символическую отладочную информацию, предназначенную для использования с mdb. Обратитесь к ПРИМЕЧАНИЯМ, символической информации отладки, ниже для получения дополнительной информации. После отображения структуры данных :: print увеличивает точку на размер типа в байтах.

Если указана опция -a, отображается адрес каждого участника. Если присутствует опция -p, :: print интерпретирует адрес как адрес физической памяти вместо адреса виртуальной памяти. Если указана опция -t, отображается тип каждого члена. Если присутствуют опции -d или -x, все целые числа отображаются в десятичном (-d) или шестнадцатеричном (-x). По умолчанию эвристика используется для определения, должно ли значение отображаться в десятичном или шестнадцатеричном формате. Количество символов в массиве символов, который читается и отображается в виде строки, может быть ограничено с помощью опции -c. Если указана опция -C, ограничение не применяется. Количество элементов в стандартном массиве, который читается и отображается, может быть ограничено параметром -l. Если указана опция -L, ограничения не применяются, и отображаются все элементы массива. Значения по умолчанию для -c и -l могут быть изменены с помощью :: set или параметра командной строки -o, как описано в разделе ОПЦИИ.

Если указана опция -i, значение адреса интерпретируется как непосредственное значение для печати. Вы должны указать тип для интерпретации значения. Если тип меньше, чем 64 бита, непосредственное значение интерпретируется, как если бы оно было размером типа. Параметр -i нельзя использовать вместе с параметром -p. Если задана опция -a, показанные адреса являются байтовыми смещениями, начинающимися с нуля.

::quit

$q

Выйти из отладчика.

[ thread ] ::regs

[ thread ] $r

Распечатайте набор регистров общего назначения репрезентативного потока. Если указан поток, отображается набор регистров общего назначения для этого потока. Выражение потока должно быть одним из идентификаторов потока, описанных в разделе «Поддержка потоков» выше.

:: релиз [-a]

: R [-a]

Раскрепите ранее прикрепленный процесс или файл ядра. Если указана опция -a, процесс освобождается и остается остановленным и отмененным. Впоследствии его можно продолжить с помощью prun (1) (см. Proc (1)) или возобновить, применив mdb или другой отладчик. По умолчанию освобожденный процесс принудительно завершается, если он был создан с помощью mdb с использованием :: run, или он освобождается и запускается, если к нему был присоединен с помощью mdb с помощью параметра -p или с помощью :: attach или: A dcmds.

::run [ args . . . ]

:r [ args . . . ]

Запустите новую целевую программу, запущенную с указанными аргументами, и подключите ее. Аргументы не интерпретируются оболочкой. Если отладчик уже проверяет работающую программу, он сначала отсоединяется от этой программы, как будто с помощью :: release.

::set [ -wF ] [ -/-o option ] [ -s distance ] [ -I path ]

#sp;#sp;[ -L path ] [ -P prompt ]

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

-F

Принудительно захватывает следующий пользовательский процесс, к которому применяется :: attach, как если бы mdb был выполнен с опцией -F в командной строке.

-I

Устанавливает путь по умолчанию для поиска макрофайлов. Аргумент пути может содержать любой из специальных токенов, описанных для параметра командной строки -I в разделе ОПЦИИ.

-L

Устанавливает путь по умолчанию для поиска модулей отладчика. Аргумент пути может содержать любой из специальных токенов, описанных для параметра командной строки -I в разделе ОПЦИИ.

Включает указанную опцию отладчика. Если используется форма -o, опция отключена. Строки параметров описаны вместе с параметром командной строки -o в разделе ОПЦИИ.

-P

Устанавливает в командной строке указанную строку приглашения.

-s

Устанавливает расстояние совпадения символа до указанного расстояния. Обратитесь к описанию параметра командной строки -s в разделе ОПЦИИ для получения дополнительной информации.

-w

Повторно открывает цель для записи, как если бы mdb был выполнен с параметром -w в командной строке.

::showrev [ -pv ]

Отображение информации о версии для аппаратного и программного обеспечения. Если параметры не указаны, отображается общая информация о системе. Параметр -v отображает информацию о версии для всех загружаемых объектов, тогда как параметр -p отображает информацию о версии только для загружаемых объектов, которые были установлены в системе как часть исправления. Информация о версии доступна не для всех загружаемых объектов. Загрузка объектов без информации о версии исключается из выходных данных для параметра -p и указывается как имеющая версию "Unknown" в выходных данных для параметра -v.

[signal] ::sigbp [-/-dDestT] [-c cmd] [-n count] SIG ...

[signal] :t [-/-dDestT] [-c cmd] [-n count] SIG ...

Трассировка доставки указанных сигналов. Сигналы идентифицируются с использованием необязательного номера сигнала, предшествующего dcmd, или списка имен или номеров сигналов (см. signal.h (3HEAD)) после dcmd. Опции -d, -D, -e, -s, -t, -T, -c и -n имеют то же значение, что и для :: evset dcmd. Первоначально отслеживается набор сигналов, которые заставляют процесс выгружать ядро ​​по умолчанию (см. signal.h (3HEAD)) и SIGINT.

:: sizeof тип

Вывести размер указанного типа в байтах. Параметр типа может называть структуру C, объединение, перечисление, основной целочисленный тип или указатель на любой из этих типов. В качестве имени типа можно использовать оператор области видимости обратной кавычки (`), описанный в разделе Разрешение имен символов выше. :: sizeof dcmd может использоваться только с объектами, которые содержат символическую отладочную информацию, предназначенную для использования с mdb. Обратитесь к ПРИМЕЧАНИЯМ, символической информации отладки, ниже для получения дополнительной информации.

[ address ] ::stack [ count ]

[ address ] $c [ count ]

Выведите обратную трассировку стека C. Если dcmd предшествует явный адрес, отображается обратная трассировка, начинающаяся с этого адреса виртуальной памяти. В противном случае отображается стек репрезентативного потока. Если в качестве аргумента указано необязательное значение count, для каждого кадра стека в выходных данных отображается не более аргументов count.

::status

Распечатать сводную информацию, относящуюся к текущей цели.

::step [ over | out ] [ SIG ]

:s [ SIG ]

:u [ SIG ]

Шаг целевой программы одной инструкцией. Если в качестве аргумента указано необязательное имя или номер сигнала (см. signal.h (3HEAD)), сигнал немедленно доставляется к цели как часть возобновления его выполнения. Если указан необязательный аргумент over, :: step переходит к вызовам подпрограмм. Аргумент :: step over совпадает с аргументом :: next dcmd. Если указан необязательный аргумент «out», целевая программа продолжается до тех пор, пока репрезентативный поток не вернется из текущей функции. Если в данный момент не выполняется ни одна целевая программа, :: step out запускает новую программу, выполняющуюся как бы :: run, и останавливается на первой инструкции. : S dcmd - это то же самое, что и :: step. : U dcmd - это то же самое, что и :: step out.

[ syscall ] ::sysbp [ -/-dDestT ] [ -io ] [ -c cmd ]

#sp;#sp;[ -n count ] syscall...

Отслеживание входа или выхода из указанных системных вызовов. Системные вызовы идентифицируются с помощью дополнительного номера системного вызова, предшествующего dcmd, или списка имен или номеров системных вызовов (см. <sys / syscall.h>) после dcmd. Если указана опция -i (по умолчанию), спецификаторы событий срабатывают при входе в ядро ​​для каждого системного вызова. Если указана опция -o, спецификаторы событий срабатывают при выходе из ядра. Опции -d, -D, -e, -s, -t, -T, -c и -n имеют то же значение, что и для :: evset dcmd.

thread ::tls symbol

Напечатайте адрес хранилища для указанного символа локального хранилища потока (TLS) в контексте указанного потока. Выражение потока должно быть одним из идентификаторов потока, описанных в разделе «Поддержка потоков» выше. Имя символа может использовать любой из операторов определения объема, описанных в разделе «Разрешение имени символа» выше.

::typeset [ -/-t] variable-name . . .

Установите атрибуты для именованных переменных. Если указано одно или несколько имен переменных, они определяются и устанавливаются в значение точки. Если присутствует опция -t, устанавливается пользовательский тег, связанный с каждой переменной. Если присутствует опция -t, тег очищается. Если имена переменных не указаны, выводится список переменных и их значений.

::unload module-name

Выгрузите указанный dmod. Список активных dmods может быть напечатан с помощью :: dmods dcmd. Встроенные модули не могут быть выгружены. Модули, которые заняты (то есть предоставляют dcmds, которые выполняются в данный момент), не могут быть выгружены.

::unset variable-name . . .

Удалить (удалить) указанную переменную (и) из списка определенных переменных. Некоторые переменные, экспортируемые mdb, помечаются как постоянные и не могут быть сброшены пользователем.

:: vars [-npt]

Распечатайте список именованных переменных. Если присутствует опция -n, вывод ограничен переменными, которые в настоящее время имеют ненулевые значения. Если указана опция -p, переменные печатаются в форме, пригодной для повторной обработки отладчиком с использованием $ <dcmd. Эта опция может использоваться для записи переменных в файл макроса и последующего восстановления этих значений. Если указана опция -t, печатаются только помеченные переменные. Переменные могут быть помечены с помощью опции -t :: typeset dcmd.

::version

Напечатайте номер версии отладчика.

address ::vtop [-a as]

Распечатайте отображение физического адреса для указанного виртуального адреса, если это возможно. :: vtop dcmd доступен только при проверке цели ядра или при проверке пользовательского процесса внутри аварийного дампа ядра (после того, как был выпущен :: context dcmd).

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

[ address ] ::walk walker-name [ variable-name ]

Пройдите по элементам структуры данных, используя указанный ходок. Доступные пешеходы могут быть перечислены с помощью :: walkers dcmd. Некоторые путешественники работают с глобальной структурой данных и не требуют начального адреса. Например, пройдитесь по списку структур proc в ядре. Другие обходчики работают с определенной структурой данных, адрес которой должен быть указан явно. Например, если указан указатель на адресное пространство, пройдитесь по списку сегментов. При интерактивном использовании :: walk dcmd печатает адрес каждого элемента структуры данных в базе по умолчанию. Dcmd также может использоваться для предоставления списка адресов для конвейера. В качестве имени ходунка можно использовать оператор определения объема в обратном кавычке (`), описанный выше в разделе dcmd и Разрешение имени ходунка. Если указано необязательное имя переменной, указанной переменной присваивается значение, возвращаемое на каждом шаге обхода, когда mdb вызывает следующий этап конвейера.

::walkers

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

::whence [ -v ] name . . .

::which [ -v ] name ..

Выведите dmod, который экспортирует указанные dcmds и ходунки. Эти dcmds могут быть использованы для определения того, какой dmod в настоящее время предоставляет глобальное определение данного dcmd или обходчика. Обратитесь к разделу о разрешении имен dcmd и Walker выше для получения дополнительной информации о глобальном разрешении имен. Опция -v заставляет dcmd печатать альтернативные определения каждого dcmd и обходчика в порядке приоритета.

addr [ ,len ]::wp [ -/-dDestT ] [ -rwx ] [ -c cmd ]

#sp;#sp; [ -n count ]

addr [ ,len ] :a [ cmd . . . ]

addr [ ,len ] :p [ cmd . . . ]

addr [ ,len ] :w [ cmd . . . ]

Установите точку наблюдения по указанному адресу. Длина в байтах наблюдаемой области может быть установлена ​​путем указания необязательного числа повторений, предшествующего dcmd. Если длина явно не указана, по умолчанию используется один байт. :: wp dcmd позволяет настроить точку наблюдения для запуска любой комбинации доступа на чтение (опция -r), запись (опция -w) или выполнение (опция -x). Опции -d, -D, -e, -s, -t, -T, -c и -n имеют то же значение, что и для :: evset dcmd. Команда: a dcmd устанавливает контрольную точку доступа для чтения по указанному адресу. Параметр: p dcmd устанавливает точку наблюдения доступа для выполнения по указанному

адресу. : W dcmd устанавливает точку доступа для записи по указанному адресу. Аргументы, следующие за: a,: p и: w dcmds, объединяются для формирования строки обратного вызова. Если эта строка содержит метасимволы, она должна быть заключена в кавычки.

:: xdata

Вывести список внешних буферов данных, экспортируемых текущей целью. Внешние буферы данных представляют информацию, связанную с целью, к которой нельзя получить доступ через стандартные целевые средства (то есть адресное пространство, таблицу символов или набор регистров). Эти буферы могут быть использованы dcmds; Для получения дополнительной информации обратитесь к Руководству по модульному отладчику Solaris.

: z

Удалить все описатели событий из списка отслеживаемых программных событий. Спецификаторы событий также могут быть удалены с помощью :: delete.