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 0x4
sinalizador de bit ao debug
argumento da boot-args
variável por meio do nvram
comando. 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=0x4
sinalizador permite entrar no depurador no NMI. Isso significa que você pode pressionar Command-Option-Control-Shift-Escape
sua VM e entrar 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 pontos de interrupção, inspecionar a memória, imprimir um backtrace etc., você precisará digitar continue
para o kernel retomar a execução.