WindowServer の起動時にデバッガをアタッチする launchd .plist を作成しました。スクリプトの主要部分は次のようになります
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 にアタッチされている分離画面セッションが開始されます。
ただし、これにより、Snow Leopard の launchd でエラー状態が発生し、エラー メッセージがログに出力されるようです。
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
「... システム Mach ブートストラップでは許可されていません」というメッセージは、システムの起動からの経過時間に関係なく発生することに注意してください。
画面セッションを生成できるようにするための回避策はありますか?
launchd のマンページによると、
デーモンは、UI を表示したり、ユーザーのログイン セッションと直接やり取りしたりしないでください。
これは、launchd がこの動作を別のセッションと対話し、それを拒否していると見なしていることを示唆している可能性があります。コードはここにありますが、私はそれに慣れていません: http://launchd.macosforge.org/trac/browser/trunk/launchd/src/launchd_core_logic.c#L8250