저는 Mac OS X에서 커널 디버깅을 하기 위해 가상머신을 사용하고 있습니다. 왜냐하면 다른 컴퓨터보다 저렴하고 편리하기 때문입니다.
불행하게도 Windows와 달리 디버거를 사용하여 커널을 중지하는 것은 불가능합니다. 이를 중지하려면 머신에 마스크할 수 없는 인터럽트를 보내야 합니다. 실제 머신에서는 부팅 시 올바른 디버그 플래그를 사용하고 ⌘전원 버튼을 누르는 동안 두 키를 모두 누른 상태에서 이를 수행할 수 있습니다. 그러나 이 키 조합은 가상 머신에서 실현될 수 없습니다.
나는 찾았다조잡한 스크립트가상 머신을 일시 중지하고 일시 중지 상태를 편집하여 NMI가 보류 중임을 나타내고 다시 시작하지만 이는 시간 낭비처럼 보입니다.
VMware Fusion을 사용하여 가상 머신에 마스크 불가능한 인터럽트를 보낼 수 있습니까?
답변1
명령을 통해 변수 의 인수 0x4
에 비트 플래그를 설정/추가할 수 있습니다 . 예는 다음과 같습니다.debug
boot-args
nvram
sudo nvram boot-args="debug=0x144 kext-dev-mode=1 kcsuffix=development pmuflags=1 -v"
설명한대로여기, 다른 인수 중에서 debug=0x4
플래그를 사용하면 NMI의 디버거에 들어갈 수 있습니다. 즉, 언제든지 VM을 누르고 디버거에 들어갈 수 있습니다 (어떤 이유로 위에서 언급한 키 조합이 작동하지 않는 경우에도 Command-Option-Control-Shift-Escape
눌러야 할 수도 있습니다 ).fn
continue
결국 중단점을 설정하고, 메모리를 검사하고, 역추적을 인쇄한 후 실행을 재개하려면 커널을 입력해야 합니다 .