3

Я использую виртуальную машину для отладки ядра в Mac OS X, потому что она дешевле и удобнее, чем другой компьютер.

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

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

Можно ли отправить немаскируемое прерывание на виртуальную машину с помощью VMware Fusion?

1 ответ1

1

Вы можете установить / добавить битовый флаг 0x4 в аргумент debug переменной boot-args помощью команды nvram . Вот пример:

sudo nvram boot-args="debug=0x144 kext-dev-mode=1 kcsuffix=development pmuflags=1 -v"

Как описано здесь, среди других аргументов флаг debug=0x4 позволяет вам перейти в отладчик в NMI. Это означает, что вы можете нажать Command-Option-Control-Shift-Escape на вашей виртуальной машине и зайти в отладчик в любое время (по некоторым причинам вам также может понадобиться нажать клавишу fn если указанная выше комбинация клавиш не работает).

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .