|
|
< Previous PageNext Page > |
KEXT debugging
can be complicated. Before you can debug a KEXT, you must first
enable kernel debugging, as Mac OS X is not normally configured
to permit debugging the kernel. Only the root account can enable
kernel debugging, and you need to reboot Mac OS X for the changes
to take effect. (You can use sudo
to gain
root privileges if you don’t want to enable a root password.)
Kernel debugging is performed using two Mac OS X computers, called the development or debug host and the debug target. These computers must be connected over a reliable network connection on the same subnet (or within a single local network). Specifically, there must not be any intervening IP routers or other devices that could make hardware-based Ethernet addressing impossible.
The KEXT is registered (and loaded and run) on the target. The debugger is launched and run on the debug host. You can also rebuild your KEXT on the debug host, after you fix any errors you find.
Debugging must be performed in this fashion because you must temporarily halt the kernel on the target in order to use the debugger. When you halt the kernel, all other processes on that computer stop. However, a debugger running remotely can continue to run and can continue to examine (or modify) the kernel on the target.
Note that bugs in KEXTs may cause the target kernel to freeze or panic. If this happens, you may not be able to continue debugging, even over a remote connection; you have to reboot the target and start over, setting a breakpoint just before the code where the KEXT crashed and working very carefully up to the crash point.
Developers generally debug KEXTs using gdb,
a source-level debugger with a command-line interface. You will
need to work in the Terminal application to run gdb
.
For detailed information about using gdb
,
see the documentation included with Mac OS X. You can also use the help
command
from within gdb
.
Some features of gdb
are
unavailable when debugging KEXTs because of implementation limitations.
For example:
You can’t
use gdb
to call a function
or method in a KEXT.
You should not use gdb
to
debug interrupt routines.
The former is largely a barrier introduced by the C++ language.
The latter may work in some cases but is not recommended due to
the potential for gdb
to interrupt something upon
which kdp (the kernel shim used by gdb
)
depends in order to function properly.
Use care that you do not halt the kernel for too long when you are debugging (for example, when you set breakpoints). In a short time, internal inconsistencies can appear that cause the target kernel to panic or freeze, forcing you to reboot the target.
Additional information about debugging can be found in “When Things Go Wrong: Debugging the Kernel”.
< Previous PageNext Page > |
Last updated: 2006-11-07
|
Get information on Apple products.
Visit the Apple Store online or at retail locations. 1-800-MY-APPLE Copyright © 2007 Apple Inc. All rights reserved. | Terms of use | Privacy Notice |