# VBoxManage debugvm

VBoxManage-debugvm

1

VBoxManage-debugvm

интроспекция и гостевая отладка

&product-name;

          VBoxManage debugvm
          uuid|имя-ВМ
          dumpvmcore
          --filename=name

          VBoxManage debugvm
          uuid|имя-ВМ
          info
          элемент
          аргументы

          VBoxManage debugvm
          uuid|имя-ВМ
          injectnmi

          VBoxManage debugvm
          uuid|имя-ВМ
          log
          --release--debug
          настройки-группы

          VBoxManage debugvm
          uuid|имя-ВМ
          logdest
          --release--debug
          назначения

          VBoxManage debugvm
          uuid|имя-ВМ
          logflags
          --release--debug
          флаги

          VBoxManage debugvm
          uuid|имя-ВМ
          osdetect

          VBoxManage debugvm
          uuid|имя-ВМ
          osinfo

          VBoxManage debugvm
          uuid|имя-ВМ
          osdmesg
          --lines=строки

          VBoxManage debugvm
          uuid|имя-ВМ
          getregisters
          --cpu=id
          набор-регистров.имя-регистра

          VBoxManage debugvm
          uuid|имя-ВМ
          setregisters
          --cpu=id
          набор-регистров.имя-регистра=значение

          VBoxManage debugvm
          uuid|имя-ВМ
          show
          --human-readable--sh-export--sh-eval--cmd-set
          элемент-настроек

          VBoxManage debugvm
          uuid|имя-ВМ
          stack
          --cpu=id

          VBoxManage debugvm
          uuid|имя-ВМ
          statistics
          --reset
          --descriptions
          --pattern=шаблон

          VBoxManage debugvm
          uuid|имя-ВМ
          guestsample
          --filename=имя-файла
          --sample-interval-us=интервал
          --sample-time-us=время

## Описание

Команды "debugvm" предназначены для экспертов, которые хотят разобраться в деталях исполнения виртуальной машины. Как и отладчик VM описанный в ts_debugger, эти команды полезны только если хорошо разбираетесь в архитектуре PC и знаете как отлаживать программное обеспечение.

### Общие параметры

Все подкоманды `debugvm` выполняются в работающей виртуальной машине:

`uuid|имя-ВМ`

- Или UUID или имя (чувствительно к регистру) ВМ.

### debugvm dumpvmcore

Создает файл системного дампа указанной ВМ. Этот файл будет иметь стандартный формат ELF ядра (с пользовательскими секциями); Смотрите ts_guest-core-format.

Команда соответствует команде `writecore` отладчика.

`--filename=`имя-файла``

- Имя выходного файла.

### debugvm info

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

Команда соответствует команде `info` отладчика.

`элемент`

- Имя элемента для отображения. Специальное имя `help` показывает список всех доступных элементов и подсказок по необязательным аргументам.

`аргументы`

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

### debugvm injectnmi

Внедряет немаскируемое прерывание (NMI) в гостевую систему. Это может быть полезно для определенных сценариев отладки. Что точно произойдет, зависит от гостевой операционной системы, однако NMI может вызвать крах всей гостевой ОС. Не используйте если не знаете что вы делаете.

### debugvm log

Изменяет настройки группы для журналирования ВМ процесса в режимах отладки (`--debug`) или выпуска (`--release`).

`настройки-группы` в основном строки в форме `em.e.f.l`, `hm=~0` и `-em.f`. Поддерживаются базовые подстановочные знаки для сопоставления групп. Группа `all` - это псевдоним для всех групп.

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

Эта команда соответствует команде `log` отладчика.

### debugvm logdest

Изменяет настройки назначения для журналирования ВМ процесса в режимах отладки (`--debug`) или выпуска (`--release`). Более подробную информацию по формату назначения лучше посмотреть в src/VBox/Runtime/common/log/log.cpp.

`назначения` - это одна или несколько мнемоник, которые могут предваряться "no" для их отключения. Некоторые из них берут значения после разделителей ":" или "=". Множественные мнемоники могут разделяться через пробел или задаваться как отдельные аргументы в командной строке.

Список доступных назначений:

`file[=`файл`], nofile`

- Указывает файл журнала. Если файл журнала не указан, он будет сгенерирован на основе текущего времени UTC и имени процесса ВМ и помещен в текущую директорию процесса ВМ. Заметим, что данная команда не имеет силы если файл журнала уже открыт.

`dir=`директория`, nodir`

- Указывает директорию для файлов журналов. Заметим, что данная команда не имеет силы если файл журнала уже открыт.

`history=`количество`, nohistory`

- Ненулевые значения включают историю журналов. Значение показывает сколько хранить старых файлов журналов.

`histsize=`байт``

- Максимальный размер файла журнала перед сменой файла. По умолчанию бесконечно.

`histtime=`секунды``

- Максимальный возраст (в секундах) файла журнала перед сменой файла. По умолчанию бесконечно.

`ringbuffer, noringbuffer`

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

`stdout, nostdout`

- Записывать содержимое журнала в стандартный поток вывода.

`stdout, nostdout`

- Записывать содержимое журнала в стандартный поток ошибок.

`debugger, nodebugger`

- Записывать содержимое журнала в отладчик, если поддерживается ОС хоста.

`com, nocom`

- Записывать содержимое журнала в COM порт. Применимо только для raw-режима и ring-0 журналирования.

`user, nouser`

- Пользовательское назначение, не имеющее значения для процессов ВМ.

Эта команда соответствует команде `logdest` отладчика.

### debugvm logflags

Изменяет флаги журналирования ВМ процесса в режимах отладки (`--debug`) или выпуска (`--release`). Пожалуйста, имейте ввиду, что изменения применяются к существующим и не подменяют их.

`флаги` - это список мнемоник, опционально предваряемые "no", "!", "~" или "-" для смены значения на противоположное. Префикс "+" может использоваться для отмены предыдущего противоположного значения или как разделитель, хотя лучше использовать пробел или отдельные аргументы.

Список мнемоник флагов с их противоположной формой, где применимо (звездочка показывает значение по умолчанию):

`enabled*, disabled`

- Включает или выключает журналирование.

`buffered, unbuffered*`

- Включает буферизацию вывода журнала перед записью в назначение.

`writethrough(/writethru)`

- Открывать ли файл назначения со сквозной буферизацией или нет.

`flush`

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

`lockcnts`

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

`cpuid`

- Предварять каждую строку журнала ID текущего ЦПУ.

`pid`

- Предварять каждую строку журнала ID текущего процесса.

`flagno`

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

`flag`

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

`groupno`

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

`group`

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

`tid`

- Предварять каждую строку журнала ID текущего потока.

`thread`

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

`time`

- Предварять каждую строку журнала текущим временем UTC.

`timeprog`

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

`msprog`

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

`ts`

- Предварять каждую строку журнала текущим монотонным временем в наносекундах.

`tsc`

- Предварять каждую строку журнала текущим временем ЦПУ (TSC).

`rel, abs*`

- Выбирает как отображать префиксы `ts` и `tsc`: как время относительно предыдущей строки журнала или как абсолютное время.

`hex*, dec`

- Выбирает как форматировать префиксы `ts` и `tsc`: как шестнадцатиричные значения или как десятичные.

`custom`

- Пользовательский префикс записи журнала. По умолчанию не имеет значения для ВМ процессов.

`usecrlf, uself*`

- Выводить используя окончания строк в стиле DOS (CRLF) или UNIX (LF).

`overwrite*, append`

- Перезаписывать файл назначения или добавлять строки в конец файла.

Эта команда соответствует команде `logflags` отладчика.

### debugvm osdetect

Заставляет отладчик VMM (заново) определить гостевую операционную систему (ОС). Команда сначала загружает все плагины отладчика.

Эта команда соответствует команде `detect` отладчика.

### debugvm osinfo

Отображает информацию о гостевой операционной системе (ОС), ранее определенной отладчиком VMM.

### debugvm osdmesg

Отображает журнал ядра гостевой ОС, если она определена и поддерживается.

`--lines=`строки``

- Количество отображаемых строк. Счет ведется с конца журнала. По умолчанию бесконечно.

### debugvm getregisters

Получает значения регистров гостевых ЦПУ и эмулируемых устройств.

`набор-регистров.имя-регистра`

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

  1. набор-регистров.имя-регистра.под-поле

  2. набор-регистров.имя-регистра

  3. имя-регистра-цпу.под-поле

  4. имя-регистра-цпу

  5. all

  Форма `all` показывает все регистры (без под-полей). Имена регистров не чувствительно к регистру.

`--cpu=`id``

- Выбирает набор регистров ЦПУ при указании только регистра ЦПУ (3-я и 4-я формы). По умолчанию 0.

### debugvm setregisters

Изменяет значения регистров гостевой ОС и эмулируемых устройств.

`набор-регистров.имя-регистра=значение`

- Присвоение значений одному или нескольким регистрами, где каждый указывается в следующих формах:

  1. набор-регистров.имя-регистра.под-поле=значение

  2. набор-регистров.имя-регистра=значение

  3. имя-регистра-цпу.под-поле=значение

  4. имя-регистра-цпу=значение

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

`--cpu=`id``

- Выбирает набор регистров ЦПУ при указании только регистра ЦПУ (3-я и 4-я формы). По умолчанию 0.

### debugvm show

Отображает настройки журнала для ВМ.

`--human-readable`

- Выбирает человеко-читаемый вывод.

`--sh-export`

- Выбирает формат вывода в стиле bourne shell команды `export`.

`--sh-eval`

- Выбирает формат вывода в стиле аргументов bourne shell команды `eval`.

`--cmd-set`

- Выбирает формат вывода в стиле команды DOS `SET`.

`settings-item`

- Указывает что отображать. Один или несколько из следующих:

  - logdbg-settings - настройки журнала в режиме отладки.

  - logrel-settings - настройки журнала в режиме выпуска.

  - log-settings - псевдоним для настроек журнала в режимах и отладки и выпуска.

### debugvm stack

Разматывает стеки гостевого ЦПУ в меру наших возможностей. Рекомендуется сначала запустить команду `osdetect` чтобы получить символы и возможно информацию для раскрутки стека.

`--cpu=`id``

- Выбирает один гостевой ЦПУ, у которого надо отобразить стек. По умолчанию все ЦПУ.

### debugvm statistics

Отображает или сбрасывает статистики VMM.

Получает значения регистров для гостевых ЦПУ и эмулируемых устройств.

`--pattern=`шаблон``

- Шаблоны с подстановочными знаками в стиле DOS/NT для выбранных статистик. Множественные шаблоны указываются через символ '|' (канал) в качестве разделителя.

`--reset`

- Выбрать сброс вместо режима отображения.

### debugvm guestsample

Создает отчет с выборками о гостевой активности.

Получает имя файла куда сбрасывать отчет.

`--filename=`имя-файла``

- Имя файла куда сбрасывать отчет с выборками.

`--sample-interval-us=`интервал``

- Интервал в микросекундах между гостевыми выборками.

`--sample-time-us=`time``

- Количество микросекунд, в течение которых берется выборка.