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?
Respostas:
Você pode definir / adicionar
0x4
bandeira de bit para odebug
argumento doboot-args
variável através donvram
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 pressionarCommand-Option-Control-Shift-Escape
em sua VM e solte no depurador a qualquer momento (por algum motivo, você também pode precisar pressionarfn
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.fonte
xcrun lldb
, então(lldb) kdp-remote <vm ip>