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

3

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

Infelizmente, ao contrário do equivalente no Windows, não é possível usar o depurador para parar o kernel. Para pará-lo, você tem que enviar a 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, enquanto pressiona o botão de energia. No entanto, essa combinação de teclas não pode ser realizada em uma máquina virtual.

Achei um roteiro desleixado que 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 o VMware Fusion?

zneak
fonte
Esta é uma questão antiga, mas. 1) Eu duvido. 2) O que você ganha quando pressiona o botão NMI no seu host? Isso é supondo que você tenha um botão físico para isso. A maioria dos servidores faz isso, mas a maioria dos desktops consomem isso.
Hennes
No meu sistema operacional, você obtém um despejo de memória do kernel para poder inspecionar e depurar o estado, que é o que eu quero.
bahamat

Respostas:

1

Você pode definir / adicionar 0x4 bandeira de bit para o debug argumento do boot-args variável através do nvram comando. Aqui está um exemplo:

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

Como descrito Aqui entre os demais argumentos, a debug=0x4 flag permite que você caia no debugger no NMI. Isso significa que você pode pressionar Command-Option-Control-Shift-Escape em sua VM e solte no depurador a qualquer momento (por algum motivo, você também pode precisar pressionar fn se a combinação de teclas mencionada acima não funcionar).

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

Romeo
fonte
Em um host Mac, isso iniciará uma NMI no host ou na VM?
zneak
Isso gerará uma NMI na sua VM, o que dá uma oportunidade para o depurador remoto se conectar. Então a partir do terminal do seu tipo de máquina host xcrun lldb, então (lldb) kdp-remote <vm ip>
Romeo
@zneak isso te ajudou?
Romeo
Eu não tentei isso. A questão é de 3 anos atrás, eu não uso mais o VMware ou faço desenvolvimento de kernel.
zneak
Sim, isso funciona. Apenas certifique-se de que o host não tenha o mesmo sinalizador de depuração configurado, ou você poderá hospedar o host do NMI.
rgov