Estoy usando una máquina virtual para depurar el kernel en Mac OS X porque es más barato y más conveniente que otra computadora.
Desafortunadamente, al contrario del equivalente de Windows, no es posible usar el depurador para detener el núcleo. Para detenerlo, debe enviar a la máquina una interrupción no enmascarable. En una máquina física, puede hacerlo con los indicadores de depuración correctos en el arranque y luego manteniendo ⌘presionadas ambas teclas mientras presiona el botón de encendido. Sin embargo, esta combinación de teclas no puede realizarse en una máquina virtual.
Encontré un script descuidado que suspende la máquina virtual, edita el estado suspendido para indicar que hay un NMI pendiente y lo reanuda, pero esto parece una pérdida de tiempo.
¿Es posible enviar una interrupción no enmascarable a una máquina virtual con VMware Fusion?
Respuestas:
Puede establecer / agregar el
0x4
indicador de bit aldebug
argumento de laboot-args
variable a través delnvram
comando. Aquí hay un ejemplo:sudo nvram boot-args="debug=0x144 kext-dev-mode=1 kcsuffix=development pmuflags=1 -v"
Como se describe aquí , entre los otros argumentos, el
debug=0x4
indicador le permite ingresar al depurador en NMI. Esto significa que puede presionarCommand-Option-Control-Shift-Escape
su VM y acceder al depurador en cualquier momento (por alguna razón, también puede presionarfn
si la combinación de teclas mencionada anteriormente no funciona).Finalmente, después de establecer puntos de interrupción, inspeccionar la memoria, imprimir una traza inversa, etc., deberá escribir
continue
para que el núcleo reanude la ejecución.fuente
xcrun lldb
, luego(lldb) kdp-remote <vm ip>