Enviando uma interrupção não mascarável para uma máquina virtual com VMware Fusion

Enviando uma interrupção não mascarável para uma máquina virtual com VMware Fusion

Estou usando uma máquina virtual para depurar o kernel no Mac OS X porque é mais barato e mais conveniente que outro computador.

Infelizmente, ao contrário do equivalente do Windows, não é possível usar o depurador para parar o kernel. Para pará-lo, você deve enviar à máquina uma interrupção não mascarável. Em uma máquina física, você pode fazer isso com os sinalizadores de depuração corretos na inicialização e, em seguida, mantendo pressionadas as duas teclas enquanto pressiona o botão liga/desliga. No entanto, esta combinação de teclas não pode ser realizada em uma máquina virtual.

Achei umroteiro desleixadoque suspende a máquina virtual, edita o estado suspenso para indicar que uma NMI está pendente e a retoma, mas isso parece uma perda de tempo.

É possível enviar uma interrupção não mascarável para uma máquina virtual com VMware Fusion?

Responder1

Você pode definir/adicionar o 0x4sinalizador de bit ao debugargumento da boot-argsvariável por meio do nvramcomando. Aqui está um exemplo:

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

Conforme descritoaqui, entre outros argumentos, o debug=0x4sinalizador permite entrar no depurador no NMI. Isso significa que você pode pressionar Command-Option-Control-Shift-Escapesua VM e entrar no depurador a qualquer momento (por algum motivo, você também pode precisar pressionar fnse a combinação de teclas mencionada acima não funcionar).

Eventualmente, depois de definir pontos de interrupção, inspecionar a memória, imprimir um backtrace etc., você precisará digitar continuepara o kernel retomar a execução.

informação relacionada