Я написал launchd .plist, который должен подключать отладчик к WindowServer при его запуске. Основная часть скрипта выглядит как
screen -D -m -S "WindowServer Debugger" \
gdb \
-x $GDBSCRIPT \
/System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/CoreGraphics.framework/Versions/A/Resources/WindowServer \
$WSPID
Это запускает сеанс отдельного экрана, в котором GDB подключен к WindowServer.
Однако, похоже, это вызывает состояние ошибки в launchd под Snow Leopard, из-за чего он выводит сообщения об ошибках в журнал:
com.apple.launchd[1] (0x10011c070.anonymous.screen[961]) Bug: launchd_core_logic.c:8250 (23932):0
com.apple.launchd[1] (0x10011c070.anonymous.screen[961]) Switching sessions is not allowed in the system Mach bootstrap.
com.apple.launchd[1] (0x10011c070.anonymous.screen[961]) _vprocmgr_switch_to_session(): kr = 0x44c
Следует отметить, что сообщения «... не разрешено в системном загрузчике Маха» появляются независимо от того, сколько времени прошло с момента загрузки системы.
Есть ли обходной путь для этого, чтобы я мог вызвать сеанс экрана?
Согласно справочной странице для launchd,
Демоны не должны пытаться отображать пользовательский интерфейс или напрямую взаимодействовать с сеансом входа пользователя в систему.
Это может указывать на то, что launchd рассматривает это поведение как взаимодействие с другим сеансом и отрицает его. Код здесь, но я не знаком с ним: http://launchd.macosforge.org/trac/browser/trunk/launchd/src/launchd_core_logic.c#L8250